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");
        }
Ejemplo n.º 2
0
        /// <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)));
            });
        }