Example #1
0
        public AuditEntity(AuditObjectData auditObjectData, AuditSubjectData auditSubjectData)
        {
            ActionType = auditObjectData.ActionType;

            if (auditObjectData.ObjectIdentifierProperty == null)
            {
                ObjectIdentifier = auditObjectData.ObjectIdentifier;
            }
            else
            {
                ObjectIdentifier = auditObjectData.ObjectIdentifierProperty.CurrentValue.ToString();
            }

            ObjectType     = auditObjectData.ObjectType;
            ObjectMetadata = auditObjectData.ObjectMetadata;

            SubjectType       = auditSubjectData.SubjectType;
            SubjectIdentifier = auditSubjectData.SubjectIdentifier;
            SubjectMetadata   = auditSubjectData.SubjectMetadata;

            GroupIdentifier = auditSubjectData.GroupIdentifier;

            Host            = auditSubjectData.Host;
            RemoteIp        = auditSubjectData.RemoteIp;
            ResourceName    = auditSubjectData.ResourceName;
            UserAgent       = auditSubjectData.UserAgent;
            TraceIdentifier = auditSubjectData.TraceIdentifier;
            AppVersion      = auditSubjectData.AppVersion;

            Created = DateTime.UtcNow;
        }
Example #2
0
        public override int SaveChanges()
        {
            SoftDelete();
            AddTimestampInfo();

            ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker);

            if (proccessChangeTrackerResult.RequiresCustomBatch)
            {
                using (IDbContextTransaction dbTransaction = Database.BeginTransaction())
                {
                    try
                    {
                        int changes = base.SaveChanges();

                        AuditSubjectData auditSubjectData = _auditDataService.Get();

                        IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                                  .Select(x => new AuditEntity(
                                                                              auditObjectData: x,
                                                                              auditSubjectData: auditSubjectData));

                        Audit.AddRange(auditEntities);

                        int auditChanges = base.SaveChanges();

                        dbTransaction.Commit();

                        return(changes);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, $"Failed to perform db transaction");

                        dbTransaction.Rollback();

                        throw;
                    }
                }
            }
            else
            {
                AuditSubjectData auditSubjectData = _auditDataService.Get();

                IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                          .Select(x => new AuditEntity(
                                                                      auditObjectData: x,
                                                                      auditSubjectData: auditSubjectData));

                Audit.AddRange(auditEntities);

                return(base.SaveChanges() - auditEntities.Count());
            }
        }
        public virtual AuditSubjectData Get()
        {
            AuditSubjectData auditSubjectData = new AuditSubjectData(
                subjectType: Data.SubjectTypes.Machine,
                subjectIdentifier: _backgroundServiceContextAccessor.BackgroundServiceContext.Name,
                host: null,
                remoteIp: null,
                resourceName: null,
                userAgent: null,
                traceIdentifier: null,
                appVersion: null);

            return(auditSubjectData);
        }
Example #4
0
        public override int SaveChanges(bool acceptAllChangesOnSuccess)
        {
            ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker, _auditOptions);
            AuditSubjectData            auditSubjectData            = _auditSubjectDataService.Get();

            IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                      .Select(x => new AuditEntity(
                                                                  auditObjectData: x,
                                                                  auditSubjectData: auditSubjectData));

            Audit.AddRange(auditEntities);

            return(base.SaveChanges());
        }
Example #5
0
        public virtual AuditSubjectData Get()
        {
            AuditSubjectData auditSubjectData = new AuditSubjectData(
                subjectType: Data.SubjectTypes.Machine,
                subjectIdentifier: _auditOptions.DefaultSubjectName,
                host: null,
                remoteIp: null,
                resourceName: null,
                userAgent: null,
                traceIdentifier: null,
                appVersion: null);

            return(auditSubjectData);
        }
Example #6
0
        public async override Task <int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
        {
            ProccessChangeTrackerResult proccessChangeTrackerResult = await ChangeTrackerAuditService.ProccessChangeTrackerAsync(ChangeTracker, _auditOptions);

            AuditSubjectData auditSubjectData = _auditSubjectDataService.Get();

            IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                      .Select(x => new AuditEntity(
                                                                  auditObjectData: x,
                                                                  auditSubjectData: auditSubjectData));

            Audit.AddRange(auditEntities);

            return(await base.SaveChangesAsync());
        }
        public AuditSubjectData Get()
        {
            AuditSubjectData auditData = new AuditSubjectData(
                subjectType: Data.SubjectTypes.Human,
                subjectIdentifier: GetUserId(),
                subjectMetadata: GetSubjectMetadata(),
                groupIdentifier: GetGroupIdentifier(),
                host: GetHost(),
                remoteIp: GetRemoteIp(),
                resourceName: GetResourceName(),
                userAgent: GetUserAgent(),
                traceIdentifier: GetTraceIdentifier(),
                appVersion: GetAppVersion());

            return(auditData);
        }
Example #8
0
        public async Task LogAsync(AuditObjectData auditObject)
        {
            AuditSubjectData auditSubjectData = _auditDataService.Get();

            AuditEntity audit = new AuditEntity(
                auditObjectData: auditObject,
                auditSubjectData: auditSubjectData);

            _dbContext.Audit.Add(audit);

            int changes = await _dbContext.SaveChangesAsync();

            if (changes <= 0)
            {
                _logger.LogError($"Failed to add audit");
            }
        }
Example #9
0
        public void Log(AuditObjectData auditObject)
        {
            AuditSubjectData auditSubjectData = _auditDataService.Get();

            AuditEntity audit = new AuditEntity(
                auditObjectData: auditObject,
                auditSubjectData: auditSubjectData);

            _dbContext.Audit.Add(audit);

            int changes = _dbContext.SaveChanges();

            if (changes <= 0)
            {
                _logger.LogError($"Failed to add audit data");
            }
        }
Example #10
0
        public async Task LogAsync(IEnumerable <AuditObjectData> auditObjects)
        {
            if (auditObjects.Count() == 0)
            {
                return;
            }

            AuditSubjectData auditSubjectData = _auditDataService.Get();

            IEnumerable <AuditEntity> auditList = auditObjects
                                                  .Select(x => new AuditEntity(
                                                              auditObjectData: x,
                                                              auditSubjectData: auditSubjectData));

            _dbContext.Audit.AddRange(auditList);

            int changes = await _dbContext.SaveChangesAsync();

            if (changes <= 0)
            {
                _logger.LogError($"Failed to add audit");
            }
        }
Example #11
0
        public async override Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            SoftDelete();
            AddTimestampInfo();

            ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker);

            if (proccessChangeTrackerResult.RequiresCustomBatch)
            {
                using (IDbContextTransaction dbTransaction = await Database.BeginTransactionAsync(cancellationToken))
                {
                    try
                    {
                        int changes = base.SaveChanges();

                        AuditSubjectData auditSubjectData = _auditDataService.Get();

                        IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                                  .Select(x => new AuditEntity(
                                                                              auditObjectData: x,
                                                                              auditSubjectData: auditSubjectData));

                        Audit.AddRange(auditEntities);

                        int auditChanges = await base.SaveChangesAsync(cancellationToken);

#if NET_CORE2
                        dbTransaction.Commit();
#elif NET_CORE3
                        await dbTransaction.CommitAsync(cancellationToken);
#endif
                        return(changes);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, $"Failed to perform db transaction");

#if NET_CORE2
                        dbTransaction.Rollback();
#elif NET_CORE3
                        await dbTransaction.RollbackAsync(cancellationToken);
#endif

                        throw;
                    }
                }
            }
            else
            {
                AuditSubjectData auditSubjectData = _auditDataService.Get();

                IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData
                                                          .Select(x => new AuditEntity(
                                                                      auditObjectData: x,
                                                                      auditSubjectData: auditSubjectData));

                Audit.AddRange(auditEntities);

                int changes = await base.SaveChangesAsync(cancellationToken);

                return(changes - auditEntities.Count());
            }
        }