Exemplo n.º 1
0
        public static AuditTrailResource FromEntity(AuditTrailEntity entity)
        {
            return(new AuditTrailResource()
            {
                CreatedAt = entity.CreatedAt,
                RequestBaseUrl = entity.RequestBaseUrl,
                RequestMethod = entity.RequestMethod,
                RequestMethodColor = entity.RequestMethodColor,
                Audit = "User: '******' from company: '" + entity.Company.Name +
                        "' made an '" + entity.RequestMethod +
                        "' request on '" + entity.RequestBaseUrl +
                        "' with flag-color '" + entity.RequestMethodColor +
                        "' and Ip address '" + entity.IpAddress + "'",

                Id = entity.PrimaryKey,
                Name = entity.Identifier,
                UserName = entity.User.Name,
                CompanyName = entity.Company.Name,
                IpAddress = entity.IpAddress,

                Changes = entity.AuditTrailChangeLog.Select(AuditTrailChangeLogResource.FromEntity).ToList().Count > 0 ? entity.AuditTrailChangeLog.Select(AuditTrailChangeLogResource.FromEntity).ToList() : null
            });
        }
Exemplo n.º 2
0
        public bool Capture(AuditTrailMetaData auditTrailMetaData)
        {
            // Meta Data
            var user             = auditTrailMetaData.User;
            var company          = auditTrailMetaData.Company;
            var permission       = auditTrailMetaData.Permission;
            var requestMethod    = auditTrailMetaData.RequestMethod;
            var requestBaseUrl   = auditTrailMetaData.RequestBaseUrl;
            var requestIpAddress = auditTrailMetaData.RequestIpAddress;
            var license          = auditTrailMetaData.License;

            if (license == false)
            {
                license = company.Licenses.Any(x => x.LicenseType.Name == "CFR");
            }

            var now = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture);

            // Validation
            if (license == false)
            {
                return(false);
            }
            if (user == null)
            {
                throw new Exception("AuditTrail Error: User is mandatory");
            }
            if (company == null)
            {
                throw new Exception("AuditTrail Error: Company is mandatory");
            }
            if (permission == null)
            {
                throw new Exception("AuditTrail Error: Permission is mandatory");
            }
            if (requestIpAddress == null)
            {
                requestIpAddress = "Not specified";
            }
            if (requestMethod == null)
            {
                requestMethod = "Not specified";
            }
            if (requestBaseUrl == null)
            {
                requestBaseUrl = "Not specified";
            }


            var states =
                ((IObjectContextAdapter)_context).ObjectContext.ObjectStateManager.GetObjectStateEntries(
                    EntityState.Added | EntityState.Modified | EntityState.Deleted);

            foreach (var state in states)
            {
                switch (state.State)
                {
                case EntityState.Added:
                {
                    var auditTrailEntity = new AuditTrailEntity()
                    {
                        User       = user,
                        Company    = company,
                        Permission = permission,

                        RequestBaseUrl     = requestBaseUrl,
                        RequestMethod      = requestMethod,
                        RequestMethodColor = "Green",
                        IpAddress          = requestIpAddress,

                        Identifier = GetTableName(state),
                        PrimaryKey = GetPrimaryKey(state),

                        CreatedAt = now
                    };
                    _context.Set <AuditTrailEntity>().Add(auditTrailEntity);
                    return(true);
                }

                case EntityState.Modified:
                {
                    var logs = GetChanges();
                    if (logs.Count == 0)
                    {
                        return(false);
                    }
                    var auditTrailUpdate = new AuditTrailEntity()
                    {
                        User       = user,
                        Company    = company,
                        Permission = permission,

                        RequestBaseUrl     = requestBaseUrl,
                        RequestMethod      = requestMethod,
                        RequestMethodColor = "Yellow",
                        IpAddress          = requestIpAddress,

                        AuditTrailChangeLog = logs,

                        Identifier = GetTableName(state),
                        PrimaryKey = GetPrimaryKey(state),

                        CreatedAt = now.ToString(CultureInfo.InvariantCulture),
                    };

                    _context.Set <AuditTrailEntity>().Add(auditTrailUpdate);
                    return(true);
                }

                case EntityState.Deleted:
                {
                    var auditTrailEntity = new AuditTrailEntity()
                    {
                        User       = user,
                        Company    = company,
                        Permission = permission,

                        RequestBaseUrl     = requestBaseUrl,
                        RequestMethod      = requestMethod,
                        RequestMethodColor = "Red",
                        IpAddress          = requestIpAddress,

                        Identifier = GetTableName(state),
                        PrimaryKey = GetPrimaryKey(state),

                        CreatedAt = now
                    };
                    _context.Set <AuditTrailEntity>().Add(auditTrailEntity);
                    return(true);
                }

                case EntityState.Detached:
                {
                    break;
                }

                case EntityState.Unchanged:
                {
                    break;
                }

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            return(false);
        }