| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- //------------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------------------------
- namespace System.ServiceModel.Configuration
- {
- using System;
- using System.Collections.ObjectModel;
- using System.ComponentModel;
- using System.Configuration;
- using System.IdentityModel.Tokens;
- using System.IO;
- using System.Runtime;
- using System.ServiceModel;
- using System.ServiceModel.Description;
- using System.ServiceModel.Security.Tokens;
- using System.Text;
- using System.Xml;
- public sealed partial class IssuedTokenParametersElement : ServiceModelConfigurationElement
- {
- Collection<IssuedTokenParametersElement> optionalIssuedTokenParameters = null;
- public IssuedTokenParametersElement()
- {
- }
- [ConfigurationProperty(ConfigurationStrings.DefaultMessageSecurityVersion)]
- [TypeConverter(typeof(MessageSecurityVersionConverter))]
- public MessageSecurityVersion DefaultMessageSecurityVersion
- {
- get { return (MessageSecurityVersion)base[ConfigurationStrings.DefaultMessageSecurityVersion]; }
- set { base[ConfigurationStrings.DefaultMessageSecurityVersion] = value; }
- }
- [ConfigurationProperty(ConfigurationStrings.AdditionalRequestParameters)]
- public XmlElementElementCollection AdditionalRequestParameters
- {
- get { return (XmlElementElementCollection)base[ConfigurationStrings.AdditionalRequestParameters]; }
- }
- [ConfigurationProperty(ConfigurationStrings.ClaimTypeRequirements)]
- public ClaimTypeElementCollection ClaimTypeRequirements
- {
- get { return (ClaimTypeElementCollection)base[ConfigurationStrings.ClaimTypeRequirements]; }
- }
- [ConfigurationProperty(ConfigurationStrings.Issuer)]
- public IssuedTokenParametersEndpointAddressElement Issuer
- {
- get { return (IssuedTokenParametersEndpointAddressElement)base[ConfigurationStrings.Issuer]; }
- }
- [ConfigurationProperty(ConfigurationStrings.IssuerMetadata)]
- public EndpointAddressElementBase IssuerMetadata
- {
- get { return (EndpointAddressElementBase)base[ConfigurationStrings.IssuerMetadata]; }
- }
- [ConfigurationProperty(ConfigurationStrings.KeySize, DefaultValue = 0)]
- [IntegerValidator(MinValue = 0)]
- public int KeySize
- {
- get { return (int)base[ConfigurationStrings.KeySize]; }
- set { base[ConfigurationStrings.KeySize] = value; }
- }
- [ConfigurationProperty(ConfigurationStrings.KeyType, DefaultValue = IssuedSecurityTokenParameters.defaultKeyType)]
- [ServiceModelEnumValidator(typeof(System.IdentityModel.Tokens.SecurityKeyTypeHelper))]
- public SecurityKeyType KeyType
- {
- get { return (SecurityKeyType)base[ConfigurationStrings.KeyType]; }
- set { base[ConfigurationStrings.KeyType] = value; }
- }
- internal Collection<IssuedTokenParametersElement> OptionalIssuedTokenParameters
- {
- get
- {
- // OptionalIssuedTokenParameters built on assumption that configuration is writable.
- // This should be protected at the callers site. If assumption is invalid, then
- // configuration system is in an indeterminate state. Need to stop in a manner that
- // user code can not capture.
- if (this.IsReadOnly())
- {
- Fx.Assert("IssuedTokenParametersElement.OptionalIssuedTokenParameters should only be called by Admin APIs");
- DiagnosticUtility.FailFast("IssuedTokenParametersElement.OptionalIssuedTokenParameters should only be called by Admin APIs");
- }
- // No need to worry about a race condition here-- this method is not meant to be called by multi-threaded
- // apps. It is only supposed to be called by svcutil and single threaded equivalents.
- if (this.optionalIssuedTokenParameters == null)
- {
- this.optionalIssuedTokenParameters = new Collection<IssuedTokenParametersElement>();
- }
- return this.optionalIssuedTokenParameters;
- }
- }
- [ConfigurationProperty(ConfigurationStrings.TokenType, DefaultValue = "")]
- [StringValidator(MinLength = 0)]
- public string TokenType
- {
- get { return (string)base[ConfigurationStrings.TokenType]; }
- set
- {
- if (String.IsNullOrEmpty(value))
- {
- value = String.Empty;
- }
- base[ConfigurationStrings.TokenType] = value;
- }
- }
- [ConfigurationProperty(ConfigurationStrings.UseStrTransform, DefaultValue = false)]
- public bool UseStrTransform
- {
- get { return (bool)base[ConfigurationStrings.UseStrTransform]; }
- set { base[ConfigurationStrings.UseStrTransform] = value; }
- }
- internal void ApplyConfiguration(IssuedSecurityTokenParameters parameters)
- {
- if (parameters == null)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("parameters"));
- if (this.AdditionalRequestParameters != null)
- {
- foreach (XmlElementElement e in this.AdditionalRequestParameters)
- {
- parameters.AdditionalRequestParameters.Add(e.XmlElement);
- }
- }
- if (this.ClaimTypeRequirements != null)
- {
- foreach (ClaimTypeElement c in this.ClaimTypeRequirements)
- {
- parameters.ClaimTypeRequirements.Add(new ClaimTypeRequirement(c.ClaimType, c.IsOptional));
- }
- }
- parameters.KeySize = this.KeySize;
- parameters.KeyType = this.KeyType;
- parameters.DefaultMessageSecurityVersion = this.DefaultMessageSecurityVersion;
- parameters.UseStrTransform = this.UseStrTransform;
- if (!string.IsNullOrEmpty(this.TokenType))
- {
- parameters.TokenType = this.TokenType;
- }
- if (PropertyValueOrigin.Default != this.ElementInformation.Properties[ConfigurationStrings.Issuer].ValueOrigin)
- {
- this.Issuer.Validate();
- parameters.IssuerAddress = ConfigLoader.LoadEndpointAddress(this.Issuer);
- if (!string.IsNullOrEmpty(this.Issuer.Binding))
- {
- parameters.IssuerBinding = ConfigLoader.LookupBinding(this.Issuer.Binding, this.Issuer.BindingConfiguration, this.EvaluationContext);
- }
- }
- if (PropertyValueOrigin.Default != this.ElementInformation.Properties[ConfigurationStrings.IssuerMetadata].ValueOrigin)
- {
- parameters.IssuerMetadataAddress = ConfigLoader.LoadEndpointAddress(this.IssuerMetadata);
- }
- }
- internal void Copy(IssuedTokenParametersElement source)
- {
- if (this.IsReadOnly())
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigReadOnly)));
- }
- if (null == source)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
- }
- foreach (XmlElementElement xmlElement in source.AdditionalRequestParameters)
- {
- XmlElementElement newElement = new XmlElementElement();
- newElement.Copy(xmlElement);
- this.AdditionalRequestParameters.Add(newElement);
- }
- foreach (ClaimTypeElement c in source.ClaimTypeRequirements)
- {
- this.ClaimTypeRequirements.Add(new ClaimTypeElement(c.ClaimType, c.IsOptional));
- }
- this.KeySize = source.KeySize;
- this.KeyType = source.KeyType;
- this.TokenType = source.TokenType;
- this.DefaultMessageSecurityVersion = source.DefaultMessageSecurityVersion;
- this.UseStrTransform = source.UseStrTransform;
- if (PropertyValueOrigin.Default != source.ElementInformation.Properties[ConfigurationStrings.Issuer].ValueOrigin)
- {
- this.Issuer.Copy(source.Issuer);
- }
- if (PropertyValueOrigin.Default != source.ElementInformation.Properties[ConfigurationStrings.IssuerMetadata].ValueOrigin)
- {
- this.IssuerMetadata.Copy(source.IssuerMetadata);
- }
- }
- internal IssuedSecurityTokenParameters Create(bool createTemplateOnly, SecurityKeyType templateKeyType)
- {
- IssuedSecurityTokenParameters result = new IssuedSecurityTokenParameters();
- if (!createTemplateOnly)
- {
- this.ApplyConfiguration(result);
- }
- else
- {
- result.KeyType = templateKeyType;
- }
- return result;
- }
- internal void InitializeFrom(IssuedSecurityTokenParameters source, bool initializeNestedBindings)
- {
- if (null == source)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
- SetPropertyValueIfNotDefaultValue(ConfigurationStrings.KeyType, source.KeyType);
- if (source.KeySize > 0)
- {
- SetPropertyValueIfNotDefaultValue(ConfigurationStrings.KeySize, source.KeySize);
- }
- SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TokenType, source.TokenType);
- SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseStrTransform, source.UseStrTransform);
- if (source.IssuerAddress != null)
- this.Issuer.InitializeFrom(source.IssuerAddress);
- if (source.DefaultMessageSecurityVersion != null)
- SetPropertyValueIfNotDefaultValue(ConfigurationStrings.DefaultMessageSecurityVersion, source.DefaultMessageSecurityVersion);
- if (source.IssuerBinding != null && initializeNestedBindings)
- {
- this.Issuer.BindingConfiguration = this.Issuer.Address.ToString();
- string bindingSectionName;
- BindingsSection.TryAdd(this.Issuer.BindingConfiguration,
- source.IssuerBinding,
- out bindingSectionName);
- this.Issuer.Binding = bindingSectionName;
- }
- if (source.IssuerMetadataAddress != null)
- {
- this.IssuerMetadata.InitializeFrom(source.IssuerMetadataAddress);
- }
- foreach (XmlElement element in source.AdditionalRequestParameters)
- {
- this.AdditionalRequestParameters.Add(new XmlElementElement(element));
- }
- foreach (ClaimTypeRequirement c in source.ClaimTypeRequirements)
- {
- this.ClaimTypeRequirements.Add(new ClaimTypeElement(c.ClaimType, c.IsOptional));
- }
- foreach (IssuedSecurityTokenParameters.AlternativeIssuerEndpoint alternativeIssuer in source.AlternativeIssuerEndpoints)
- {
- IssuedTokenParametersElement element = new IssuedTokenParametersElement();
- element.Issuer.InitializeFrom(alternativeIssuer.IssuerAddress);
- if (initializeNestedBindings)
- {
- element.Issuer.BindingConfiguration = element.Issuer.Address.ToString();
- string bindingSectionName;
- BindingsSection.TryAdd(element.Issuer.BindingConfiguration,
- alternativeIssuer.IssuerBinding,
- out bindingSectionName);
- element.Issuer.Binding = bindingSectionName;
- }
- this.OptionalIssuedTokenParameters.Add(element);
- }
- }
- protected override bool SerializeToXmlElement(XmlWriter writer, String elementName)
- {
- bool writeMe = base.SerializeToXmlElement(writer, elementName);
- bool writeComment = this.OptionalIssuedTokenParameters.Count > 0;
- if (writeComment && writer != null)
- {
- MemoryStream memoryStream = new MemoryStream();
- using (XmlTextWriter commentWriter = new XmlTextWriter(memoryStream, Encoding.UTF8))
- {
- commentWriter.Formatting = Formatting.Indented;
- commentWriter.WriteStartElement(ConfigurationStrings.AlternativeIssuedTokenParameters);
- foreach (IssuedTokenParametersElement element in this.OptionalIssuedTokenParameters)
- {
- element.SerializeToXmlElement(commentWriter, ConfigurationStrings.IssuedTokenParameters);
- }
- commentWriter.WriteEndElement();
- commentWriter.Flush();
- string commentString = new UTF8Encoding().GetString(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
- writer.WriteComment(commentString.Substring(1, commentString.Length - 1));
- commentWriter.Close();
- }
- }
- return writeMe || writeComment;
- }
- protected override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode saveMode)
- {
- if (sourceElement is IssuedTokenParametersElement)
- {
- IssuedTokenParametersElement source = (IssuedTokenParametersElement)sourceElement;
- this.optionalIssuedTokenParameters = source.optionalIssuedTokenParameters;
- }
- base.Unmerge(sourceElement, parentElement, saveMode);
- }
- }
- }
|