Beispiel #1
0
        public override void Create(AuditTrailCreateContext context)
        {
            if (_isEventLogEnabled || _isFileSystemLogEnabled)
            {
                // prep log string
                var message = ComputeMessage(context);

                if (_isEventLogEnabled)
                {
                    using (EventLog eventLog = new EventLog("Application")) {
                        eventLog.Source = _sourceName;

                        eventLog.WriteEntry(
                            message,                      // Event Message
                            EventLogEntryType.Information //, // Event Type
                            //4738, // Event ID
                            //1 // Event Category
                            );
                    }
                }
                if (_isFileSystemLogEnabled)
                {
                    _logger.Info(_logMatchString + Environment.NewLine + message);
                }
            }
        }
        public override void Create(AuditTrailCreateContext context)
        {
            var content        = context.Properties.ContainsKey("Content") ? (IContent)context.Properties["Content"] : default(IContent);
            var auditTrailPart = content != null?content.As <AuditTrailPart>() : default(AuditTrailPart);

            if (auditTrailPart == null)
            {
                return;
            }

            context.Comment = auditTrailPart.Comment;
        }
        public AuditTrailEventRecordResult CreateRecord <T>(string eventName, IUser user, IDictionary <string, object> properties = null, IDictionary <string, object> eventData = null, string eventFilterKey = null, string eventFilterData = null) where T : IAuditTrailEventProvider
        {
            var eventDescriptor = DescribeEvent <T>(eventName);

            if (!IsEventEnabled(eventDescriptor))
            {
                return new AuditTrailEventRecordResult {
                           Record     = null,
                           IsDisabled = true
                }
            }
            ;

            if (properties == null)
            {
                properties = new Dictionary <string, object>();
            }
            if (eventData == null)
            {
                eventData = new Dictionary <string, object>();
            }

            var context = new AuditTrailCreateContext {
                Event           = eventName,
                User            = user,
                Properties      = properties,
                EventData       = eventData,
                EventFilterKey  = eventFilterKey,
                EventFilterData = eventFilterData
            };

            _auditTrailEventHandlers.Create(context);

            var record = new AuditTrailEventRecord {
                Category        = eventDescriptor.CategoryDescriptor.Category,
                EventName       = eventName,
                FullEventName   = eventDescriptor.Event,
                CreatedUtc      = _clock.UtcNow,
                UserName        = user != null ? user.UserName : null,
                EventData       = _serializer.Serialize(context.EventData),
                EventFilterKey  = context.EventFilterKey,
                EventFilterData = context.EventFilterData,
                Comment         = context.Comment,
                ClientIpAddress = GetClientAddress()
            };

            _auditTrailRepository.Create(record);
            return(new AuditTrailEventRecordResult {
                Record = record,
                IsDisabled = false
            });
        }
        public override Task CreateAsync(AuditTrailCreateContext context)
        {
            var content        = context.EventFilterKey == "content" ? context.EventData.Get <ContentItem>("ContentItem") : default;
            var auditTrailPart = content != null?content.ContentItem.As <AuditTrailPart>() : default;

            if (auditTrailPart == null)
            {
                return(Task.CompletedTask);
            }

            context.Comment = auditTrailPart.Comment;

            return(Task.CompletedTask);
        }
        public async Task RecordEventAsync <TEvent>(AuditTrailContext <TEvent> context) where TEvent : class, new()
        {
            if (_shellSettings.State == TenantState.Initializing && String.IsNullOrEmpty(context.UserName))
            {
                var feature = _httpContextAccessor.HttpContext.Features.Get <RecipeEnvironmentFeature>();
                if (feature != null && feature.Properties.TryGetValue(SetupConstants.AdminUsername, out var adminUsername))
                {
                    context.UserName = (string)adminUsername;
                }
            }

            var descriptor = DescribeEvent(context.Name, context.Category);

            if (descriptor == null || !await IsEventEnabledAsync(descriptor))
            {
                return;
            }

            var createContext = new AuditTrailCreateContext <TEvent>(
                context.Name,
                context.Category,
                context.CorrelationId,
                context.UserId,
                context.UserName,
                context.AuditTrailEventItem
                );

            await _auditTrailEventHandlers.InvokeAsync((handler, context) => handler.CreateAsync(context), createContext, _logger);

            var auditTrailEvent = new AuditTrailEvent
            {
                EventId            = _auditTrailIdGenerator.GenerateUniqueId(),
                Category           = createContext.Category,
                Name               = createContext.Name,
                CorrelationId      = createContext.CorrelationId,
                UserId             = createContext.UserId,
                UserName           = createContext.UserName ?? "",
                NormalizedUserName = String.IsNullOrEmpty(createContext.UserName) ? "" : _keyNormalizer.NormalizeName(createContext.UserName),
                ClientIpAddress    = String.IsNullOrEmpty(createContext.ClientIpAddress)
                    ? await GetClientIpAddressAsync()
                    : createContext.ClientIpAddress,
                CreatedUtc = createContext.CreatedUtc ?? _clock.UtcNow
            };

            auditTrailEvent.Put(createContext.AuditTrailEventItem);

            await _auditTrailEventHandlers.InvokeAsync((handler, context, auditTrailEvent) => handler.AlterAsync(context, auditTrailEvent), createContext, auditTrailEvent, _logger);

            _session.Save(auditTrailEvent, AuditTrailEvent.Collection);
        }
Beispiel #6
0
        private string ComputeMessage(AuditTrailCreateContext context)
        {
            var eventMessageBuilder = new StringBuilder();

            eventMessageBuilder.AppendLine(
                $"Event: {context.Event}");
            eventMessageBuilder.AppendLine(
                $"Category: {context.EventDescriptor.CategoryDescriptor.Category}");
            if (context.User != null)
            {
                eventMessageBuilder.AppendLine(
                    $"UserName: {context.User.UserName}");
                var userRoles = context.User.As <IUserRoles>()?.Roles.ToList();
                if (userRoles != null)
                {
                    eventMessageBuilder.AppendLine(
                        $"UserRoles: {string.Join(", ", userRoles)}");
                }
            }
            eventMessageBuilder.AppendLine(
                $"Description: {context.EventDescriptor.Description.Text}");
            var clientAddress = GetClientAddress();

            if (!string.IsNullOrWhiteSpace(clientAddress))
            {
                eventMessageBuilder.AppendLine(
                    $"ClientAddress: {clientAddress}");
            }
            var userAgent = GetUserAgent();

            if (!string.IsNullOrWhiteSpace(userAgent))
            {
                eventMessageBuilder.AppendLine(
                    $"UserAgent:");
                eventMessageBuilder.AppendLine(
                    $"{userAgent}");
            }
            eventMessageBuilder.AppendLine(
                $"EventData:");
            eventMessageBuilder.AppendLine(
                $"{_serializer.Serialize(context.EventData)}");

            return(eventMessageBuilder.ToString());
        }
        public async Task AddAuditTrailEventAsync <TAuditTrailEventProvider>(AuditTrailContext auditTrailContext)
            where TAuditTrailEventProvider : IAuditTrailEventProvider
        {
            var eventDescriptors = DescribeEvents(auditTrailContext.EventName, typeof(TAuditTrailEventProvider).FullName);

            foreach (var eventDescriptor in eventDescriptors)
            {
                if (!await IsEventEnabledAsync(eventDescriptor))
                {
                    return;
                }

                var auditTrailCreateContext = new AuditTrailCreateContext(
                    auditTrailContext.EventName,
                    auditTrailContext.UserName,
                    auditTrailContext.EventData,
                    auditTrailContext.EventFilterKey,
                    auditTrailContext.EventFilterData);

                _auditTrailEventHandlers.Invoke((handler, context)
                                                => handler.CreateAsync(context), auditTrailCreateContext, Logger);

                var auditTrailEvent = new AuditTrailEvent
                {
                    Id              = _iidGenerator.GenerateUniqueId(),
                    Category        = eventDescriptor.CategoryDescriptor.Category,
                    EventName       = auditTrailCreateContext.EventName,
                    FullEventName   = eventDescriptor.FullEventName,
                    UserName        = !string.IsNullOrEmpty(auditTrailCreateContext.UserName) ? auditTrailContext.UserName : T["[empty]"],
                    CreatedUtc      = auditTrailCreateContext.CreatedUtc ?? _clock.UtcNow,
                    Comment         = auditTrailCreateContext.Comment.NewlinesToHtml(),
                    EventFilterData = auditTrailCreateContext.EventFilterData,
                    EventFilterKey  = auditTrailCreateContext.EventFilterKey,
                    ClientIpAddress = string.IsNullOrEmpty(auditTrailCreateContext.ClientIpAddress) ?
                                      await GetClientAddressAsync() : auditTrailCreateContext.ClientIpAddress
                };

                eventDescriptor.BuildAuditTrailEvent(auditTrailEvent, auditTrailCreateContext.EventData);

                _session.Save(auditTrailEvent);
            }
        }
Beispiel #8
0
        public override Task CreateAsync(AuditTrailCreateContext context)
        {
            if (context.Category != "Content")
            {
                return(Task.CompletedTask);
            }

            if (context is AuditTrailCreateContext <AuditTrailContentEvent> contentEvent)
            {
                var auditTrailPart = contentEvent.AuditTrailEventItem.ContentItem.As <AuditTrailPart>();
                if (auditTrailPart == null)
                {
                    return(Task.CompletedTask);
                }

                contentEvent.AuditTrailEventItem.Comment = auditTrailPart.Comment;
            }

            return(Task.CompletedTask);
        }
Beispiel #9
0
 public virtual Task CreateAsync(AuditTrailCreateContext context) => Task.CompletedTask;
Beispiel #10
0
 public virtual Task AlterAsync(AuditTrailCreateContext context, AuditTrailEvent auditTrailEvent) => Task.CompletedTask;
 public virtual void Create(AuditTrailCreateContext context)
 {
 }