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); }
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); } }
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); }
public virtual Task CreateAsync(AuditTrailCreateContext context) => Task.CompletedTask;
public virtual Task AlterAsync(AuditTrailCreateContext context, AuditTrailEvent auditTrailEvent) => Task.CompletedTask;
public virtual void Create(AuditTrailCreateContext context) { }