//----------------------------------------------------------------------- // // Copyright (c) Outercurve Foundation. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OpenId.ChannelElements { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.RelyingParty; /// /// Helps ensure compliance to some properties in the . /// internal class RelyingPartySecurityOptions : IChannelBindingElement { /// /// The security settings that are active on the relying party. /// private RelyingPartySecuritySettings securitySettings; /// /// Initializes a new instance of the class. /// /// The security settings. internal RelyingPartySecurityOptions(RelyingPartySecuritySettings securitySettings) { this.securitySettings = securitySettings; } #region IChannelBindingElement Members /// /// Gets or sets the channel that this binding element belongs to. /// /// /// This property is set by the channel when it is first constructed. /// public Channel Channel { get; set; } /// /// Gets the protection commonly offered (if any) by this binding element. /// /// /// This value is used to assist in sorting binding elements in the channel stack. /// public MessageProtections Protection { get { return MessageProtections.None; } } /// /// Prepares a message for sending based on the rules of this channel binding element. /// /// The message to prepare for sending. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// public MessageProtections? ProcessOutgoingMessage(IProtocolMessage message) { return null; } /// /// Performs any transformation on an incoming message that may be necessary and/or /// validates an incoming message based on the rules of this channel binding element. /// /// The incoming message to process. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Thrown when the binding element rules indicate that this message is invalid and should /// NOT be processed. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// public MessageProtections? ProcessIncomingMessage(IProtocolMessage message) { var positiveAssertion = message as PositiveAssertionResponse; if (positiveAssertion != null) { ErrorUtilities.VerifyProtocol( !this.securitySettings.RejectDelegatingIdentifiers || positiveAssertion.LocalIdentifier == positiveAssertion.ClaimedIdentifier, OpenIdStrings.DelegatingIdentifiersNotAllowed); return MessageProtections.None; } return null; } #endregion } }