142 lines
5.6 KiB
C#
142 lines
5.6 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
namespace System.ServiceModel.Description
|
||
|
{
|
||
|
using System;
|
||
|
using System.Collections.ObjectModel;
|
||
|
using System.ServiceModel;
|
||
|
using System.ServiceModel.Channels;
|
||
|
using System.ServiceModel.Dispatcher;
|
||
|
|
||
|
public sealed class ServiceSecurityAuditBehavior : IServiceBehavior
|
||
|
{
|
||
|
internal const AuditLogLocation defaultAuditLogLocation = AuditLogLocation.Default;
|
||
|
internal const bool defaultSuppressAuditFailure = true;
|
||
|
internal const AuditLevel defaultServiceAuthorizationAuditLevel = AuditLevel.None;
|
||
|
internal const AuditLevel defaultMessageAuthenticationAuditLevel = AuditLevel.None;
|
||
|
|
||
|
AuditLogLocation auditLogLocation;
|
||
|
bool suppressAuditFailure;
|
||
|
AuditLevel serviceAuthorizationAuditLevel;
|
||
|
AuditLevel messageAuthenticationAuditLevel;
|
||
|
|
||
|
public ServiceSecurityAuditBehavior()
|
||
|
{
|
||
|
this.auditLogLocation = ServiceSecurityAuditBehavior.defaultAuditLogLocation;
|
||
|
this.suppressAuditFailure = ServiceSecurityAuditBehavior.defaultSuppressAuditFailure;
|
||
|
this.serviceAuthorizationAuditLevel = ServiceSecurityAuditBehavior.defaultServiceAuthorizationAuditLevel;
|
||
|
this.messageAuthenticationAuditLevel = ServiceSecurityAuditBehavior.defaultMessageAuthenticationAuditLevel;
|
||
|
}
|
||
|
|
||
|
ServiceSecurityAuditBehavior(ServiceSecurityAuditBehavior behavior)
|
||
|
{
|
||
|
this.auditLogLocation = behavior.auditLogLocation;
|
||
|
this.suppressAuditFailure = behavior.suppressAuditFailure;
|
||
|
this.serviceAuthorizationAuditLevel = behavior.serviceAuthorizationAuditLevel;
|
||
|
this.messageAuthenticationAuditLevel = behavior.messageAuthenticationAuditLevel;
|
||
|
}
|
||
|
|
||
|
public AuditLogLocation AuditLogLocation
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.auditLogLocation;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
if (!AuditLogLocationHelper.IsDefined(value))
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
||
|
|
||
|
this.auditLogLocation = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool SuppressAuditFailure
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.suppressAuditFailure;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.suppressAuditFailure = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public AuditLevel ServiceAuthorizationAuditLevel
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.serviceAuthorizationAuditLevel;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
if (!AuditLevelHelper.IsDefined(value))
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
||
|
|
||
|
this.serviceAuthorizationAuditLevel = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public AuditLevel MessageAuthenticationAuditLevel
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.messageAuthenticationAuditLevel;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
if (!AuditLevelHelper.IsDefined(value))
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
||
|
|
||
|
this.messageAuthenticationAuditLevel = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal ServiceSecurityAuditBehavior Clone()
|
||
|
{
|
||
|
return new ServiceSecurityAuditBehavior(this);
|
||
|
}
|
||
|
|
||
|
void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters)
|
||
|
{
|
||
|
if (parameters == null)
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("parameters"));
|
||
|
|
||
|
parameters.Add(this);
|
||
|
}
|
||
|
|
||
|
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
|
||
|
{
|
||
|
if (description == null)
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("description"));
|
||
|
if (serviceHostBase == null)
|
||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("serviceHostBase"));
|
||
|
|
||
|
for (int i = 0; i < serviceHostBase.ChannelDispatchers.Count; i++)
|
||
|
{
|
||
|
ChannelDispatcher channelDispatcher = serviceHostBase.ChannelDispatchers[i] as ChannelDispatcher;
|
||
|
if (channelDispatcher != null)
|
||
|
{
|
||
|
foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
|
||
|
{
|
||
|
if (!endpointDispatcher.IsSystemEndpoint)
|
||
|
{
|
||
|
DispatchRuntime behavior = endpointDispatcher.DispatchRuntime;
|
||
|
behavior.SecurityAuditLogLocation = this.auditLogLocation;
|
||
|
behavior.SuppressAuditFailure = this.suppressAuditFailure;
|
||
|
behavior.ServiceAuthorizationAuditLevel = this.serviceAuthorizationAuditLevel;
|
||
|
behavior.MessageAuthenticationAuditLevel = this.messageAuthenticationAuditLevel;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|