//----------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------- namespace System.IdentityModel.Tokens { using System; using System.Collections.Generic; using System.Collections.ObjectModel; /// /// Represents the Attribute element specified in [Saml2Core, 2.7.3.1]. /// public class Saml2Attribute { private string friendlyName; private string name; private Uri nameFormat; private Collection values = new Collection(); private string originalIssuer; private string attributeValueXsiType = System.Security.Claims.ClaimValueTypes.String; /// /// Initializes a new instance of the Saml2Attribute class. /// /// The name of the attribute. public Saml2Attribute(string name) { if (string.IsNullOrEmpty(name)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("name"); } this.name = StringUtil.OptimizeString(name); } /// /// Initializes a new instance of the Saml2Attribute class. /// /// The name of the attribute. /// The collection of values that define the attribute. public Saml2Attribute(string name, IEnumerable values) : this(name) { if (null == values) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("values"); } foreach (string value in values) { this.values.Add(value); } } /// /// Initializes a new instance of the Saml2Attribute class. /// /// The name of the attribute. /// The value of the attribute. public Saml2Attribute(string name, string value) : this(name, new string[] { value }) { } /// /// Gets or sets a string that provides a more human-readable form of the attribute's /// name. [Saml2Core, 2.7.3.1] /// public string FriendlyName { get { return this.friendlyName; } set { this.friendlyName = XmlUtil.NormalizeEmptyString(value); } } /// /// Gets or sets the name of the attribute. [Saml2Core, 2.7.3.1] /// public string Name { get { return this.name; } set { if (string.IsNullOrEmpty(value)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value")); } this.name = StringUtil.OptimizeString(value); } } /// /// Gets or sets a URI reference representing the classification of the attribute /// name for the purposes of interpreting the name. [Saml2Core, 2.7.3.1] /// public Uri NameFormat { get { return this.nameFormat; } set { if (null != value && !value.IsAbsoluteUri) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("error", SR.GetString(SR.ID0013)); } this.nameFormat = value; } } /// /// Gets or sets the string that represents the OriginalIssuer of the this SAML Attribute. /// public string OriginalIssuer { get { return this.originalIssuer; } set { if (value == String.Empty) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.ID4251)); } this.originalIssuer = StringUtil.OptimizeString(value); } } /// /// Gets or sets the xsi:type of the values contained in the SAML Attribute. /// public string AttributeValueXsiType { get { return this.attributeValueXsiType; } set { if (string.IsNullOrEmpty(value)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.ID4254)); } int indexOfHash = value.IndexOf('#'); if (indexOfHash == -1) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.ID4254)); } string prefix = value.Substring(0, indexOfHash); if (prefix.Length == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.ID4254)); } string suffix = value.Substring(indexOfHash + 1); if (suffix.Length == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("value", SR.GetString(SR.ID4254)); } this.attributeValueXsiType = value; } } /// /// Gets the values of the attribute. /// public Collection Values { get { return this.values; } } } }