Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Policy / UnconditionalPolicy.cs / 1305376 / UnconditionalPolicy.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.IdentityModel.Policy
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IdentityModel.Claims;
using System.Security.Principal;
interface IIdentityInfo
{
IIdentity Identity { get; }
}
class UnconditionalPolicy : IAuthorizationPolicy, IDisposable
{
SecurityUniqueId id;
ClaimSet issuer;
ClaimSet issuance;
ReadOnlyCollection issuances;
DateTime expirationTime;
IIdentity primaryIdentity;
bool disposable = false;
bool disposed = false;
public UnconditionalPolicy(ClaimSet issuance)
: this(issuance, SecurityUtils.MaxUtcDateTime)
{
}
public UnconditionalPolicy(ClaimSet issuance, DateTime expirationTime)
{
if (issuance == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuance");
Initialize(ClaimSet.System, issuance, null, expirationTime);
}
public UnconditionalPolicy(ReadOnlyCollection issuances, DateTime expirationTime)
{
if (issuances == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuances");
Initialize(ClaimSet.System, null, issuances, expirationTime);
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ClaimSet issuance)
: this(issuance)
{
this.primaryIdentity = primaryIdentity;
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ClaimSet issuance, DateTime expirationTime)
: this(issuance, expirationTime)
{
this.primaryIdentity = primaryIdentity;
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ReadOnlyCollection issuances, DateTime expirationTime)
: this(issuances, expirationTime)
{
this.primaryIdentity = primaryIdentity;
}
UnconditionalPolicy(UnconditionalPolicy from)
{
this.disposable = from.disposable;
this.primaryIdentity = from.disposable ? SecurityUtils.CloneIdentityIfNecessary(from.primaryIdentity) : from.primaryIdentity;
if (from.issuance != null)
{
this.issuance = from.disposable ? SecurityUtils.CloneClaimSetIfNecessary(from.issuance) : from.issuance;
}
else
{
this.issuances = from.disposable ? SecurityUtils.CloneClaimSetsIfNecessary(from.issuances) : from.issuances;
}
this.issuer = from.issuer;
this.expirationTime = from.expirationTime;
}
void Initialize(ClaimSet issuer, ClaimSet issuance, ReadOnlyCollection issuances, DateTime expirationTime)
{
this.issuer = issuer;
this.issuance = issuance;
this.issuances = issuances;
this.expirationTime = expirationTime;
if (issuance != null)
{
this.disposable = issuance is WindowsClaimSet;
}
else
{
for (int i = 0; i < issuances.Count; ++i)
{
if (issuances[i] is WindowsClaimSet)
{
this.disposable = true;
break;
}
}
}
}
public string Id
{
get
{
if (this.id == null)
this.id = SecurityUniqueId.Create();
return this.id.Value;
}
}
public ClaimSet Issuer
{
get { return this.issuer; }
}
internal IIdentity PrimaryIdentity
{
get
{
ThrowIfDisposed();
if (this.primaryIdentity == null)
{
IIdentity identity = null;
if (this.issuance != null)
{
if (this.issuance is IIdentityInfo)
{
identity = ((IIdentityInfo)this.issuance).Identity;
}
}
else
{
for (int i = 0; i < this.issuances.Count; ++i)
{
ClaimSet issuance = this.issuances[i];
if (issuance is IIdentityInfo)
{
identity = ((IIdentityInfo)issuance).Identity;
// Preferably Non-Anonymous
if (identity != null && identity != SecurityUtils.AnonymousIdentity)
{
break;
}
}
}
}
this.primaryIdentity = identity ?? SecurityUtils.AnonymousIdentity;
}
return this.primaryIdentity;
}
}
internal ReadOnlyCollection Issuances
{
get
{
ThrowIfDisposed();
if (this.issuances == null)
{
List issuances = new List(1);
issuances.Add(issuance);
this.issuances = issuances.AsReadOnly();
}
return this.issuances;
}
}
public DateTime ExpirationTime
{
get { return this.expirationTime; }
}
internal bool IsDisposable
{
get { return this.disposable; }
}
internal UnconditionalPolicy Clone()
{
ThrowIfDisposed();
return (this.disposable) ? new UnconditionalPolicy(this) : this;
}
public virtual void Dispose()
{
if (this.disposable && !this.disposed)
{
this.disposed = true;
SecurityUtils.DisposeIfNecessary(this.primaryIdentity as WindowsIdentity);
SecurityUtils.DisposeClaimSetIfNecessary(this.issuance);
SecurityUtils.DisposeClaimSetsIfNecessary(this.issuances);
}
}
void ThrowIfDisposed()
{
if (this.disposed)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ObjectDisposedException(this.GetType().FullName));
}
}
public virtual bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
ThrowIfDisposed();
if (this.issuance != null)
{
evaluationContext.AddClaimSet(this, this.issuance);
}
else
{
for (int i = 0; i < this.issuances.Count; ++i)
{
if (this.issuances[i] != null)
{
evaluationContext.AddClaimSet(this, this.issuances[i]);
}
}
}
// Preferably Non-Anonymous
if (this.PrimaryIdentity != null && this.PrimaryIdentity != SecurityUtils.AnonymousIdentity)
{
IList identities;
object obj;
if (!evaluationContext.Properties.TryGetValue(SecurityUtils.Identities, out obj))
{
identities = new List(1);
evaluationContext.Properties.Add(SecurityUtils.Identities, identities);
}
else
{
// null if other overrides the property with something else
identities = obj as IList;
}
if (identities != null)
{
identities.Add(this.PrimaryIdentity);
}
}
evaluationContext.RecordExpirationTime(this.expirationTime);
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.IdentityModel.Policy
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IdentityModel.Claims;
using System.Security.Principal;
interface IIdentityInfo
{
IIdentity Identity { get; }
}
class UnconditionalPolicy : IAuthorizationPolicy, IDisposable
{
SecurityUniqueId id;
ClaimSet issuer;
ClaimSet issuance;
ReadOnlyCollection issuances;
DateTime expirationTime;
IIdentity primaryIdentity;
bool disposable = false;
bool disposed = false;
public UnconditionalPolicy(ClaimSet issuance)
: this(issuance, SecurityUtils.MaxUtcDateTime)
{
}
public UnconditionalPolicy(ClaimSet issuance, DateTime expirationTime)
{
if (issuance == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuance");
Initialize(ClaimSet.System, issuance, null, expirationTime);
}
public UnconditionalPolicy(ReadOnlyCollection issuances, DateTime expirationTime)
{
if (issuances == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("issuances");
Initialize(ClaimSet.System, null, issuances, expirationTime);
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ClaimSet issuance)
: this(issuance)
{
this.primaryIdentity = primaryIdentity;
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ClaimSet issuance, DateTime expirationTime)
: this(issuance, expirationTime)
{
this.primaryIdentity = primaryIdentity;
}
internal UnconditionalPolicy(IIdentity primaryIdentity, ReadOnlyCollection issuances, DateTime expirationTime)
: this(issuances, expirationTime)
{
this.primaryIdentity = primaryIdentity;
}
UnconditionalPolicy(UnconditionalPolicy from)
{
this.disposable = from.disposable;
this.primaryIdentity = from.disposable ? SecurityUtils.CloneIdentityIfNecessary(from.primaryIdentity) : from.primaryIdentity;
if (from.issuance != null)
{
this.issuance = from.disposable ? SecurityUtils.CloneClaimSetIfNecessary(from.issuance) : from.issuance;
}
else
{
this.issuances = from.disposable ? SecurityUtils.CloneClaimSetsIfNecessary(from.issuances) : from.issuances;
}
this.issuer = from.issuer;
this.expirationTime = from.expirationTime;
}
void Initialize(ClaimSet issuer, ClaimSet issuance, ReadOnlyCollection issuances, DateTime expirationTime)
{
this.issuer = issuer;
this.issuance = issuance;
this.issuances = issuances;
this.expirationTime = expirationTime;
if (issuance != null)
{
this.disposable = issuance is WindowsClaimSet;
}
else
{
for (int i = 0; i < issuances.Count; ++i)
{
if (issuances[i] is WindowsClaimSet)
{
this.disposable = true;
break;
}
}
}
}
public string Id
{
get
{
if (this.id == null)
this.id = SecurityUniqueId.Create();
return this.id.Value;
}
}
public ClaimSet Issuer
{
get { return this.issuer; }
}
internal IIdentity PrimaryIdentity
{
get
{
ThrowIfDisposed();
if (this.primaryIdentity == null)
{
IIdentity identity = null;
if (this.issuance != null)
{
if (this.issuance is IIdentityInfo)
{
identity = ((IIdentityInfo)this.issuance).Identity;
}
}
else
{
for (int i = 0; i < this.issuances.Count; ++i)
{
ClaimSet issuance = this.issuances[i];
if (issuance is IIdentityInfo)
{
identity = ((IIdentityInfo)issuance).Identity;
// Preferably Non-Anonymous
if (identity != null && identity != SecurityUtils.AnonymousIdentity)
{
break;
}
}
}
}
this.primaryIdentity = identity ?? SecurityUtils.AnonymousIdentity;
}
return this.primaryIdentity;
}
}
internal ReadOnlyCollection Issuances
{
get
{
ThrowIfDisposed();
if (this.issuances == null)
{
List issuances = new List(1);
issuances.Add(issuance);
this.issuances = issuances.AsReadOnly();
}
return this.issuances;
}
}
public DateTime ExpirationTime
{
get { return this.expirationTime; }
}
internal bool IsDisposable
{
get { return this.disposable; }
}
internal UnconditionalPolicy Clone()
{
ThrowIfDisposed();
return (this.disposable) ? new UnconditionalPolicy(this) : this;
}
public virtual void Dispose()
{
if (this.disposable && !this.disposed)
{
this.disposed = true;
SecurityUtils.DisposeIfNecessary(this.primaryIdentity as WindowsIdentity);
SecurityUtils.DisposeClaimSetIfNecessary(this.issuance);
SecurityUtils.DisposeClaimSetsIfNecessary(this.issuances);
}
}
void ThrowIfDisposed()
{
if (this.disposed)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ObjectDisposedException(this.GetType().FullName));
}
}
public virtual bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
ThrowIfDisposed();
if (this.issuance != null)
{
evaluationContext.AddClaimSet(this, this.issuance);
}
else
{
for (int i = 0; i < this.issuances.Count; ++i)
{
if (this.issuances[i] != null)
{
evaluationContext.AddClaimSet(this, this.issuances[i]);
}
}
}
// Preferably Non-Anonymous
if (this.PrimaryIdentity != null && this.PrimaryIdentity != SecurityUtils.AnonymousIdentity)
{
IList identities;
object obj;
if (!evaluationContext.Properties.TryGetValue(SecurityUtils.Identities, out obj))
{
identities = new List(1);
evaluationContext.Properties.Add(SecurityUtils.Identities, identities);
}
else
{
// null if other overrides the property with something else
identities = obj as IList;
}
if (identities != null)
{
identities.Add(this.PrimaryIdentity);
}
}
evaluationContext.RecordExpirationTime(this.expirationTime);
return true;
}
}
}
// 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
- ModuleBuilderData.cs
- PathData.cs
- ObjectCloneHelper.cs
- control.ime.cs
- FixedSOMPageConstructor.cs
- InstanceNameConverter.cs
- RemotingAttributes.cs
- ExpressionContext.cs
- MediaElementAutomationPeer.cs
- DbProviderSpecificTypePropertyAttribute.cs
- DataGridViewColumnEventArgs.cs
- SiteMapDataSource.cs
- QilExpression.cs
- SmiSettersStream.cs
- ContainerSelectorBehavior.cs
- FaultBookmark.cs
- Rfc2898DeriveBytes.cs
- Int32Converter.cs
- ReadWriteSpinLock.cs
- BaseDataListComponentEditor.cs
- PrintDialog.cs
- _ListenerAsyncResult.cs
- DependsOnAttribute.cs
- TextAutomationPeer.cs
- DynamicQueryableWrapper.cs
- MediaElementAutomationPeer.cs
- SqlCommandBuilder.cs
- BitConverter.cs
- InvalidOperationException.cs
- SpeechSeg.cs
- HelpInfo.cs
- CodeTypeReference.cs
- Decimal.cs
- CmsInterop.cs
- HMACSHA256.cs
- Renderer.cs
- SignerInfo.cs
- AuthenticationManager.cs
- TryCatch.cs
- RemoteWebConfigurationHost.cs
- AttributeCollection.cs
- CustomErrorsSectionWrapper.cs
- StaticDataManager.cs
- TableLayoutPanelCellPosition.cs
- RootAction.cs
- Merger.cs
- WebPartCollection.cs
- ECDiffieHellmanCngPublicKey.cs
- FunctionNode.cs
- XmlWrappingWriter.cs
- DBCSCodePageEncoding.cs
- Itemizer.cs
- ColumnBinding.cs
- TimelineGroup.cs
- UnsafeNativeMethodsPenimc.cs
- ToolStripPanel.cs
- TripleDES.cs
- GridViewDeleteEventArgs.cs
- CallSite.cs
- PolicyManager.cs
- GridViewEditEventArgs.cs
- SqlRecordBuffer.cs
- dsa.cs
- SafeWaitHandle.cs
- WpfWebRequestHelper.cs
- XmlEncApr2001.cs
- Module.cs
- UIElement.cs
- InkCanvasAutomationPeer.cs
- CustomSignedXml.cs
- EntityModelSchemaGenerator.cs
- SvcFileManager.cs
- TemplateComponentConnector.cs
- _IPv6Address.cs
- TextShapeableCharacters.cs
- XmlSortKeyAccumulator.cs
- RequestCachePolicy.cs
- AdornerHitTestResult.cs
- RMEnrollmentPage2.cs
- MessageQueueInstaller.cs
- OletxTransactionFormatter.cs
- IdentifierService.cs
- XmlCharacterData.cs
- AttributeCollection.cs
- WindowsListViewItemStartMenu.cs
- DesignSurfaceEvent.cs
- Html32TextWriter.cs
- EntityTypeBase.cs
- OdbcEnvironmentHandle.cs
- SQLConvert.cs
- DefaultTextStore.cs
- PatternMatcher.cs
- ProjectionPruner.cs
- CodeSubDirectory.cs
- ByteAnimationBase.cs
- RotateTransform.cs
- SourceElementsCollection.cs
- References.cs
- CellIdBoolean.cs
- DBCommandBuilder.cs