using BuddyFinance.Integration.Logging;
using BuddyFinance.Integration.Models;
using BuddyFinance.Integration.Models.Enums;
using BuddyFinance.Integration.Utils;
using System;
using System.Configuration;
using System.Data.Entity.Validation;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web.Helpers;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
namespace BuddyFinance.WebApi.Filters
{
//TODO: Update Log entry description to be user friendly
///
///
///
public class LogAttribute : ActionFilterAttribute
{
///
///
///
///
public override void OnActionExecuting(HttpActionContext actionContext)
{
var token = System.Web.HttpContext.Current.Request.Headers["X-Auth-Token"];
int? userId = TokenManager.UserId(token);
var action = actionContext.ActionDescriptor.ActionName;
var contoller = actionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
Logger.Log(
Integration.Models.Enums.LogTypeEnum.Information,
$"message: 'API Request Executing', env: '{ConfigurationManager.AppSettings["env"]}', action: '{action}', controller: '{contoller}'",
userId,
actionContext.Request.GetOwinContext().Request.RemoteIpAddress,
actionContext.Request.Headers.UserAgent.ToString());
base.OnActionExecuting(actionContext);
}
///
///
///
///
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var token = System.Web.HttpContext.Current.Request.Headers["X-Auth-Token"];
int? userId = TokenManager.UserId(token);
var action = actionExecutedContext.ActionContext.ActionDescriptor.ActionName;
var contoller = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var result = actionExecutedContext.Response?.Content as ObjectContent;
var resultStr = "";
if (result != null && result.Value != null)
{
resultStr = result.Value.ToString();
try
{
resultStr = Json.Encode(result.Value);
}
catch (System.Exception)
{
//ignored
}
}
else
{
resultStr = " -- Failed to get result";
}
var res = actionExecutedContext.Response?.Content;
if (res != null)
{
Task.Factory.StartNew(async () =>
{
BaseResult