//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.Test.Mocks { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using Microsoft.VisualStudio.TestTools.UnitTesting; internal class MockReplayProtectionBindingElement : IChannelBindingElement { private bool messageReceived; #region IChannelBindingElement Members MessageProtections IChannelBindingElement.Protection { get { return MessageProtections.ReplayProtection; } } /// /// Gets or sets the channel that this binding element belongs to. /// public Channel Channel { get; set; } bool IChannelBindingElement.PrepareMessageForSending(IProtocolMessage message) { var replayMessage = message as IReplayProtectedProtocolMessage; if (replayMessage != null) { replayMessage.Nonce = "someNonce"; return true; } return false; } bool IChannelBindingElement.PrepareMessageForReceiving(IProtocolMessage message) { var replayMessage = message as IReplayProtectedProtocolMessage; if (replayMessage != null) { Assert.AreEqual("someNonce", replayMessage.Nonce, "The nonce didn't serialize correctly, or something"); // this mock implementation passes the first time and fails subsequent times. if (this.messageReceived) { throw new ReplayedMessageException(message); } this.messageReceived = true; return true; } return false; } #endregion } }