/// <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, // }); } }
/// <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); } }
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); } } }
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()); }
/// <summary>Initializes a new instance of the <see cref="T:System.Web.Mvc.ActionFilterAttribute" /> class.</summary> public AuditAttribute(AuditingLevel level) { this.Level = level; }