Ejemplo n.º 1
0
 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 DefaultTransactionContext(),
         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));
            });
        }