Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Tokens / SamlAttributeStatement.cs / 1305376 / SamlAttributeStatement.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IdentityModel.Tokens
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.IdentityModel;
using System.IdentityModel.Claims;
using System.IdentityModel.Selectors;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using System.Xml;
public class SamlAttributeStatement : SamlSubjectStatement
{
readonly ImmutableCollection attributes = new ImmutableCollection();
bool isReadOnly = false;
public SamlAttributeStatement()
{
}
public SamlAttributeStatement(SamlSubject samlSubject, IEnumerable attributes)
: base(samlSubject)
{
if (attributes == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("attributes"));
foreach (SamlAttribute attribute in attributes)
{
if (attribute == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.SAMLEntityCannotBeNullOrEmpty, XD.SamlDictionary.Attribute.Value));
this.attributes.Add(attribute);
}
CheckObjectValidity();
}
public IList Attributes
{
get { return this.attributes; }
}
public override bool IsReadOnly
{
get { return this.isReadOnly; }
}
public override void MakeReadOnly()
{
if (!this.isReadOnly)
{
foreach (SamlAttribute attribute in attributes)
{
attribute.MakeReadOnly();
}
this.attributes.MakeReadOnly();
this.isReadOnly = true;
}
}
void CheckObjectValidity()
{
if (this.SamlSubject == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLSubjectStatementRequiresSubject)));
if (this.attributes.Count == 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeShouldHaveOneValue)));
}
public override void ReadXml(XmlDictionaryReader reader, SamlSerializer samlSerializer, SecurityTokenSerializer keyInfoSerializer, SecurityTokenResolver outOfBandTokenResolver)
{
if (reader == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("reader"));
if (samlSerializer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("samlSerializer"));
#pragma warning suppress 56506 // samlSerializer.DictionaryManager is never null.
SamlDictionary dictionary = samlSerializer.DictionaryManager.SamlDictionary;
reader.MoveToContent();
reader.Read();
if (reader.IsStartElement(dictionary.Subject, dictionary.Namespace))
{
SamlSubject subject = new SamlSubject();
subject.ReadXml(reader, samlSerializer, keyInfoSerializer, outOfBandTokenResolver);
base.SamlSubject = subject;
}
else
{
// SAML Subject is a required Attribute Statement clause.
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeStatementMissingSubjectOnRead)));
}
while (reader.IsStartElement())
{
if (reader.IsStartElement(dictionary.Attribute, dictionary.Namespace))
{
// SAML Attribute is a extensibility point. So ask the SAML serializer
// to load this part.
SamlAttribute attribute = samlSerializer.LoadAttribute(reader, keyInfoSerializer, outOfBandTokenResolver);
if (attribute == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLUnableToLoadAttribute)));
this.attributes.Add(attribute);
}
else
{
break;
}
}
if (this.attributes.Count == 0)
{
// Each Attribute statement should have at least one attribute.
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeStatementMissingAttributeOnRead)));
}
reader.MoveToContent();
reader.ReadEndElement();
}
public override void WriteXml(XmlDictionaryWriter writer, SamlSerializer samlSerializer, SecurityTokenSerializer keyInfoSerializer)
{
CheckObjectValidity();
if (writer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("writer"));
if (samlSerializer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("samlSerializer"));
#pragma warning suppress 56506 // samlSerializer.DictionaryManager is never null.
SamlDictionary dictionary = samlSerializer.DictionaryManager.SamlDictionary;
writer.WriteStartElement(dictionary.PreferredPrefix.Value, dictionary.AttributeStatement, dictionary.Namespace);
this.SamlSubject.WriteXml(writer, samlSerializer, keyInfoSerializer);
for (int i = 0; i < this.attributes.Count; i++)
{
this.attributes[i].WriteXml(writer, samlSerializer, keyInfoSerializer);
}
writer.WriteEndElement();
}
protected override void AddClaimsToList(IList claims)
{
if (claims == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("claims");
for (int i = 0; i < attributes.Count; i++)
{
if (attributes[i] != null)
{
ReadOnlyCollection attributeClaims = attributes[i].ExtractClaims();
if (attributeClaims != null)
{
for (int j = 0; j < attributeClaims.Count; ++j)
if (attributeClaims[j] != null)
claims.Add(attributeClaims[j]);
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IdentityModel.Tokens
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.IdentityModel;
using System.IdentityModel.Claims;
using System.IdentityModel.Selectors;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using System.Xml;
public class SamlAttributeStatement : SamlSubjectStatement
{
readonly ImmutableCollection attributes = new ImmutableCollection();
bool isReadOnly = false;
public SamlAttributeStatement()
{
}
public SamlAttributeStatement(SamlSubject samlSubject, IEnumerable attributes)
: base(samlSubject)
{
if (attributes == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("attributes"));
foreach (SamlAttribute attribute in attributes)
{
if (attribute == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.SAMLEntityCannotBeNullOrEmpty, XD.SamlDictionary.Attribute.Value));
this.attributes.Add(attribute);
}
CheckObjectValidity();
}
public IList Attributes
{
get { return this.attributes; }
}
public override bool IsReadOnly
{
get { return this.isReadOnly; }
}
public override void MakeReadOnly()
{
if (!this.isReadOnly)
{
foreach (SamlAttribute attribute in attributes)
{
attribute.MakeReadOnly();
}
this.attributes.MakeReadOnly();
this.isReadOnly = true;
}
}
void CheckObjectValidity()
{
if (this.SamlSubject == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLSubjectStatementRequiresSubject)));
if (this.attributes.Count == 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeShouldHaveOneValue)));
}
public override void ReadXml(XmlDictionaryReader reader, SamlSerializer samlSerializer, SecurityTokenSerializer keyInfoSerializer, SecurityTokenResolver outOfBandTokenResolver)
{
if (reader == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("reader"));
if (samlSerializer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("samlSerializer"));
#pragma warning suppress 56506 // samlSerializer.DictionaryManager is never null.
SamlDictionary dictionary = samlSerializer.DictionaryManager.SamlDictionary;
reader.MoveToContent();
reader.Read();
if (reader.IsStartElement(dictionary.Subject, dictionary.Namespace))
{
SamlSubject subject = new SamlSubject();
subject.ReadXml(reader, samlSerializer, keyInfoSerializer, outOfBandTokenResolver);
base.SamlSubject = subject;
}
else
{
// SAML Subject is a required Attribute Statement clause.
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeStatementMissingSubjectOnRead)));
}
while (reader.IsStartElement())
{
if (reader.IsStartElement(dictionary.Attribute, dictionary.Namespace))
{
// SAML Attribute is a extensibility point. So ask the SAML serializer
// to load this part.
SamlAttribute attribute = samlSerializer.LoadAttribute(reader, keyInfoSerializer, outOfBandTokenResolver);
if (attribute == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLUnableToLoadAttribute)));
this.attributes.Add(attribute);
}
else
{
break;
}
}
if (this.attributes.Count == 0)
{
// Each Attribute statement should have at least one attribute.
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SecurityTokenException(SR.GetString(SR.SAMLAttributeStatementMissingAttributeOnRead)));
}
reader.MoveToContent();
reader.ReadEndElement();
}
public override void WriteXml(XmlDictionaryWriter writer, SamlSerializer samlSerializer, SecurityTokenSerializer keyInfoSerializer)
{
CheckObjectValidity();
if (writer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("writer"));
if (samlSerializer == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("samlSerializer"));
#pragma warning suppress 56506 // samlSerializer.DictionaryManager is never null.
SamlDictionary dictionary = samlSerializer.DictionaryManager.SamlDictionary;
writer.WriteStartElement(dictionary.PreferredPrefix.Value, dictionary.AttributeStatement, dictionary.Namespace);
this.SamlSubject.WriteXml(writer, samlSerializer, keyInfoSerializer);
for (int i = 0; i < this.attributes.Count; i++)
{
this.attributes[i].WriteXml(writer, samlSerializer, keyInfoSerializer);
}
writer.WriteEndElement();
}
protected override void AddClaimsToList(IList claims)
{
if (claims == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("claims");
for (int i = 0; i < attributes.Count; i++)
{
if (attributes[i] != null)
{
ReadOnlyCollection attributeClaims = attributes[i].ExtractClaims();
if (attributeClaims != null)
{
for (int j = 0; j < attributeClaims.Count; ++j)
if (attributeClaims[j] != null)
claims.Add(attributeClaims[j]);
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FontFamily.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- Bezier.cs
- Geometry3D.cs
- QueryOutputWriter.cs
- HebrewCalendar.cs
- AssemblySettingAttributes.cs
- ConfigsHelper.cs
- Page.cs
- UInt64.cs
- ObjectSelectorEditor.cs
- IProvider.cs
- IndexedEnumerable.cs
- XmlText.cs
- LoginUtil.cs
- XmlIgnoreAttribute.cs
- TextEndOfSegment.cs
- EntityDataSourceContainerNameItem.cs
- InputBindingCollection.cs
- TextTreeNode.cs
- OleDbRowUpdatingEvent.cs
- NumberSubstitution.cs
- ReadOnlyCollectionBuilder.cs
- SafeBitVector32.cs
- dataobject.cs
- COM2TypeInfoProcessor.cs
- WebPartMenu.cs
- HostingEnvironmentSection.cs
- InteropTrackingRecord.cs
- TokenBasedSetEnumerator.cs
- NotFiniteNumberException.cs
- TimerTable.cs
- XamlDesignerSerializationManager.cs
- SimpleLine.cs
- ClientBuildManager.cs
- GlyphTypeface.cs
- SqlErrorCollection.cs
- ScriptModule.cs
- ILGen.cs
- UndoEngine.cs
- SqlBooleanMismatchVisitor.cs
- DependencyProperty.cs
- SoapSchemaExporter.cs
- PrePrepareMethodAttribute.cs
- EntityDataSourceEntityTypeFilterItem.cs
- VerificationException.cs
- RangeValueProviderWrapper.cs
- Size3DValueSerializer.cs
- LogicalCallContext.cs
- XamlSerializerUtil.cs
- DelegateCompletionCallbackWrapper.cs
- X509InitiatorCertificateClientElement.cs
- DataGridViewRowHeaderCell.cs
- PropertyEmitterBase.cs
- TabletCollection.cs
- OutputCacheProfileCollection.cs
- CharacterBuffer.cs
- PriorityChain.cs
- AuditLogLocation.cs
- PageCodeDomTreeGenerator.cs
- Task.cs
- MobileControlBuilder.cs
- NegatedConstant.cs
- DnsPermission.cs
- WebPartZone.cs
- RawContentTypeMapper.cs
- BitmapEncoder.cs
- CheckBox.cs
- BindingWorker.cs
- NativeMethods.cs
- UserPrincipalNameElement.cs
- Authorization.cs
- InvalidMessageContractException.cs
- Stream.cs
- CompilerGlobalScopeAttribute.cs
- Error.cs
- PersianCalendar.cs
- AutoScrollExpandMessageFilter.cs
- ServerIdentity.cs
- RuleSet.cs
- StylusTip.cs
- StyleHelper.cs
- SplitterCancelEvent.cs
- XmlSchemaValidator.cs
- HitTestParameters3D.cs
- ExpressionValueEditor.cs
- HttpModuleAction.cs
- ObjectParameterCollection.cs
- UserMapPath.cs
- PropertyDescriptorCollection.cs
- HyperLinkField.cs
- EncoderNLS.cs
- WebBrowserBase.cs
- ListControlConvertEventArgs.cs
- TextElementCollection.cs
- BmpBitmapEncoder.cs
- SafeLibraryHandle.cs
- AsyncDataRequest.cs
- KeyConstraint.cs
- WindowsListView.cs