Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Tokens / SamlAttributeStatement.cs / 1 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BaseCollection.cs
- CheckBoxStandardAdapter.cs
- CatalogZone.cs
- NamespaceQuery.cs
- FormsAuthenticationEventArgs.cs
- HandlerWithFactory.cs
- ChannelServices.cs
- Page.cs
- DependencyObjectProvider.cs
- DictionaryKeyPropertyAttribute.cs
- DataGridViewRowsRemovedEventArgs.cs
- WindowsFormsLinkLabel.cs
- DoubleStorage.cs
- UnsafeNativeMethodsPenimc.cs
- WebPartConnectionsDisconnectVerb.cs
- AlternationConverter.cs
- WindowsRegion.cs
- cookie.cs
- ApplicationServiceManager.cs
- UpDownEvent.cs
- PropertyToken.cs
- HttpHandler.cs
- RtfToXamlLexer.cs
- XPathDocumentBuilder.cs
- ComboBoxAutomationPeer.cs
- FusionWrap.cs
- METAHEADER.cs
- VirtualPath.cs
- ImageDrawing.cs
- XamlTypeWithExplicitNamespace.cs
- StringArrayEditor.cs
- WebFormDesignerActionService.cs
- AtomContentProperty.cs
- DataObjectCopyingEventArgs.cs
- ConnectionStringEditor.cs
- Rule.cs
- GenerateScriptTypeAttribute.cs
- MenuItem.cs
- DependencyPropertyConverter.cs
- PrintPreviewGraphics.cs
- CookieParameter.cs
- XmlCharCheckingWriter.cs
- SignatureConfirmationElement.cs
- ScrollPatternIdentifiers.cs
- GenericPrincipal.cs
- EntityViewContainer.cs
- GeometryGroup.cs
- RtfToken.cs
- GridLengthConverter.cs
- Thickness.cs
- Wow64ConfigurationLoader.cs
- DataGridTableStyleMappingNameEditor.cs
- Block.cs
- ConnectionInterfaceCollection.cs
- PropertyPath.cs
- OleDbError.cs
- BypassElementCollection.cs
- PropertyMapper.cs
- UidManager.cs
- DisplayNameAttribute.cs
- InstancePersistenceCommand.cs
- mactripleDES.cs
- ProfileModule.cs
- XmlNodeChangedEventManager.cs
- DrawingGroup.cs
- MsmqQueue.cs
- EpmContentDeSerializer.cs
- ScalarOps.cs
- RequiredFieldValidator.cs
- CopyOnWriteList.cs
- LocalizabilityAttribute.cs
- FileDialogCustomPlacesCollection.cs
- Soap.cs
- LinearGradientBrush.cs
- DataViewSettingCollection.cs
- LayoutTableCell.cs
- XmlSequenceWriter.cs
- TailCallAnalyzer.cs
- Section.cs
- DependencyPropertyKey.cs
- ImageAttributes.cs
- IdentifierService.cs
- IPCCacheManager.cs
- MenuItemBindingCollection.cs
- CorruptStoreException.cs
- ClrPerspective.cs
- TreeChangeInfo.cs
- IdentityHolder.cs
- TextBoxDesigner.cs
- WebPartManagerInternals.cs
- CustomAttribute.cs
- OleDbStruct.cs
- PrePrepareMethodAttribute.cs
- AdPostCacheSubstitution.cs
- StatusBar.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- DependencyObjectPropertyDescriptor.cs
- SelectorAutomationPeer.cs
- AssemblyBuilder.cs
- UserPersonalizationStateInfo.cs