示例#1
0
        /// <summary>
        ///     Serializes the request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="levelModifier"></param>
        /// <returns>System.String.</returns>
        private string SerializeRequest(HttpRequestBase request, uint levelModifier, AuditingLevel level)
        {
            level = IncreaseEnumValue(level, levelModifier);

            switch (level)
            {
            case AuditingLevel.NoData:
            default:
                return("");
                //case AuditingLevel.BasicData:
                //    return JsonConvertWrapper.SerializeObject(new {request.Cookies, request.Headers, request.QueryString, request.UrlReferrer});
                //case AuditingLevel.AdvancedData:
                //    return JsonConvertWrapper.SerializeObject(new
                //    {
                //        request.Cookies,
                //        request.Headers,
                //        request.QueryString,
                //        request.UrlReferrer,
                //        request.Files,
                //        request.Form,
                //        request.Params,
                //        request.Browser,
                //        request.LogonUserIdentity,
                //    });
            }
        }
示例#2
0
        /// <summary>
        ///     Called by the ASP.NET MVC framework before the action method executes.
        /// </summary>
        /// <param name="filterContext">The filter context.</param>
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            AuditAttribute auditAttribute = filterContext.ActionDescriptor.GetCustomAttributes(true).OfType <AuditAttribute>().FirstOrDefault();

            if (auditAttribute == null)
            {
                return;
            }

            AuditingLevel level         = auditAttribute.Level;
            int           levelModifier = 0;

            //int levelModifier = this.config.Get<int>(ConfigKeys.Portal.AuditingLevelModifier, 0);
            if (levelModifier >= 0) //-1 means audit disabled completely
            {
                HttpRequestBase request = filterContext.HttpContext.Request;
                Audit           audit   = new Audit()
                {
                    AuditID      = Guid.NewGuid(),
                    SessionID    = this.GetSessionId(request),
                    UserName     = (request.IsAuthenticated) ? filterContext.HttpContext.User.Identity.Name : "Anonymous",
                    IPAddress    = request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? request.UserHostAddress,
                    AreaAccessed = request.RawUrl,
                    Timestamp    = DateTime.UtcNow,
                    Data         = this.SerializeRequest(request, (uint)levelModifier, level)
                };
                AuditingModes mode = AuditingModes.DatabaseAndLogger;

                this.StoreAuditData(audit, mode, level);
            }
        }
示例#3
0
        private void StoreAuditData(Audit audit, AuditingModes mode, AuditingLevel level)
        {
            bool storeInFile = false;

            if (mode == AuditingModes.DatabaseAndLogger)
            {
                AuditingContext context = new AuditingContext();
                context.AuditRecords.Add(audit);
                context.SaveChanges();
                storeInFile = true;
            }
            else if (mode == AuditingModes.DatabaseOnly)
            {
                AuditingContext context = new AuditingContext();
                context.AuditRecords.Add(audit);
                context.SaveChanges();
            }
            else if (mode == AuditingModes.LoggerOnly)
            {
                storeInFile = true;
            }

            if (storeInFile)
            {
                if (level == AuditingLevel.BasicData)
                {
                    this.logger.StoreWithRequestData(audit);
                }
                else
                {
                    this.logger.StoreWithoutRequestData(audit);
                }
            }
        }
示例#4
0
        public Task <HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func <Task <HttpResponseMessage> > continuation)
        {
            AuditAttribute auditAttribute = actionContext.ActionDescriptor.GetCustomAttributes <AuditAttribute>().FirstOrDefault();

            if (auditAttribute == null)
            {
                return(continuation());
            }

            AuditingLevel level         = auditAttribute.Level;
            int           levelModifier = 0;

            if (levelModifier >= 0) //-1 means audit disabled completely
            {
                Audit audit = new Audit()
                {
                    AuditID      = Guid.NewGuid(),
                    SessionID    = "",
                    UserName     = (actionContext.RequestContext.Principal.Identity.IsAuthenticated) ? actionContext.RequestContext.Principal.Identity.Name : "Anonymous",
                    IPAddress    = actionContext.Request.GetClientIp(),
                    AreaAccessed = actionContext.Request.RequestUri.ToString(),
                    Timestamp    = DateTimeOffset.UtcNow,
                    Data         = ""
                };
                AuditingModes mode = AuditingModes.DatabaseAndLogger;

                this.StoreAuditData(audit, mode, level);
            }

            return(continuation());
        }
示例#5
0
 /// <summary>Initializes a new instance of the <see cref="T:System.Web.Mvc.ActionFilterAttribute" /> class.</summary>
 public AuditAttribute(AuditingLevel level)
 {
     this.Level = level;
 }