using BuddyFinance.Admin.Filters; using BuddyFinance.Admin.Models; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Utils; using FluentValidation.Results; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Configuration; //using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text.Json; namespace BuddyFinance.Admin.Controllers { [Authorize(Policy = "LoggedIn")] [TypeFilter(typeof(LogExceptionAttribute))] public class BaseController : Controller { public IConfiguration Configuration { get; } public string API_BASE { get; } public string _token = SessionManager.Current?.CurrentUser.AccessToken; // public JsonSerializerSettings pascalCaseJsonSettings = new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() }; public JsonSerializerOptions pascalCaseJsonSettings; private string env; public readonly BuddyFinanceDbContext _dbContext; public BaseController(IConfiguration configuration, BuddyFinanceDbContext dbContext) { Configuration = configuration; _dbContext = dbContext; API_BASE = Configuration.GetValue("apiRootUrl", ""); env = Configuration.GetValue("env", ""); pascalCaseJsonSettings = new JsonSerializerOptions { PropertyNamingPolicy = null }; } public override void OnActionExecuting(ActionExecutingContext context) { var action = context.RouteData.Values["action"].ToString(); var contoller = context.RouteData.Values["controller"].ToString(); var ip = context.HttpContext.Connection.RemoteIpAddress.ToString(); var userAgent = context.HttpContext.Request.Headers.ContainsKey("User-Agent") ? context.HttpContext.Request.Headers["User-Agent"].ToString() : ""; _dbContext.ActivityLog.Add(new ActivityLog { Type = LogTypeEnum.Information.ToString(), Description = $"Browsing controller: {contoller}, action: {action}", UserId = SessionManager.Current?.CurrentUser?.UserId == 0 ? null : SessionManager.Current?.CurrentUser.UserId, IpAddress = ip, UserAgent = userAgent, TimeStamp = DateTime.Now }); _dbContext.SaveChanges(); } #region helpers public List GetValidationErrors(ValidationResult validationResult) { var errors = new List(); if (validationResult.IsValid) return errors; foreach (var error in validationResult.Errors) errors.Add(error.ErrorMessage); return errors; } public string GetMonthName(int monthIndex) { switch (monthIndex) { case 1: return "January"; case 2: return "February"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; default: return "December"; } } #endregion } }