Exemple #1
0
        private async Task <bool> PublishEventAsync(ReliableEvent @event, CancellationToken cancellationToken)
        {
            var actualEvent = Deserialize(@event);

            if (actualEvent == null)
            {
                logger.LogWarning($"Unknown reliable event type: {@event.EventName}. The event won't be dispatched.");
                return(true);
            }

            using (var scope = serviceProvider.CreateScope())
            {
                var mediator        = scope.ServiceProvider.GetRequiredService <IMediator>();
                var securityContext = scope.ServiceProvider.GetRequiredService <ISecurityContext>();

                InitializeSecurityContext(@event, securityContext);

                try
                {
                    await mediator.Publish(actualEvent, cancellationToken);

                    return(true);
                }
                catch (BusinessException ex)
                {
                    logger.LogError($"Business exception occurred while processing reliable event. Details: {ex}");
                    return(true);
                }
                catch (Exception ex)
                {
                    logger.LogError($"Unknown error occured while processing reliable event. Details: {ex}");
                    return(false); // TODO: handle poison events
                }
            }
        }
Exemple #2
0
        private static void InitializeSecurityContext(ReliableEvent @event, ISecurityContext securityContext)
        {
            var identity = new ClaimsIdentity();

            identity.AddClaim(new Claim(BookFastClaimTypes.ObjectId, @event.User));
            identity.AddClaim(new Claim(BookFastClaimTypes.TenantId, @event.Tenant));

            var acceptor = (ISecurityContextAcceptor)securityContext;

            acceptor.Principal = new ClaimsPrincipal(identity);
        }
Exemple #3
0
        private Event Deserialize(ReliableEvent @event)
        {
            var type = eventMapper.GetEventType(@event.EventName);

            return(type != null ? (Event)JsonConvert.DeserializeObject(@event.Payload, type) : null);
        }