public async Task CanCaptureIdentityInTheMessage() { var step = new CapturePrincipalInOutgoingMessage(new DummySerializer()); var instance = new Message(new Dictionary <string, string>(), new object()); var context = new OutgoingStepContext(instance, new FakeTransactionContext(), new DestinationAddresses(new[] { "Larry" })); context.Save(instance); await step.Process(context, async() => { }); Assert.That(instance.Headers.ContainsKey(CapturePrincipalInOutgoingMessage.PrincipalCaptureKey)); Assert.AreEqual(instance.Headers[CapturePrincipalInOutgoingMessage.PrincipalCaptureKey], "Larry"); }
/// <summary> /// Propagates the ClaimsPrincipal through the message bus so that its there during message evaluation /// </summary> public static void AutomaticallyPropagateCurrentClaimsPrincipal(this OptionsConfigurer configurer) { if (!configurer.Has <IClaimsPrinicpalSerializer>()) { configurer.Register <IClaimsPrinicpalSerializer>(c => new DefaultClaimsPrinicpalSerializer()); } configurer.Decorate <IPipeline>(c => { var pipeline = c.Get <IPipeline>(); var serializer = c.Get <IClaimsPrinicpalSerializer>(); var outgoingStep = new CapturePrincipalInOutgoingMessage(serializer); var incomingStep = new RestorePrincipalFromIncomingMessage(serializer); return(new PipelineStepInjector(pipeline) .OnSend(outgoingStep, PipelineRelativePosition.After, typeof(AssignTypeHeaderStep)) .OnReceive(incomingStep, PipelineRelativePosition.Before, typeof(ActivateHandlersStep))); }); }