using DysonNetwork.Pass.Connection; using DysonNetwork.Pass.Storage; using DysonNetwork.Pass.Storage.Handlers; namespace DysonNetwork.Pass.Features.Account; public class ActionLogService(GeoIpService geo, FlushBufferService fbs) : IActionLogService { public void CreateActionLog(Guid accountId, string action, Dictionary meta) { var log = new ActionLog { Action = action, AccountId = accountId, Meta = meta, }; fbs.Enqueue(log); } public void CreateActionLogFromRequest(string action, Dictionary meta, HttpRequest request, Models.Account? account = null) { var log = new ActionLog { Action = action, Meta = meta, UserAgent = request.Headers.UserAgent, IpAddress = request.HttpContext.Connection.RemoteIpAddress?.ToString(), Location = geo.GetPointFromIp(request.HttpContext.Connection.RemoteIpAddress?.ToString()) }; if (request.HttpContext.Items["CurrentUser"] is Models.Account currentUser) log.AccountId = currentUser.Id; else if (account != null) log.AccountId = account.Id; else throw new ArgumentException("No user context was found"); if (request.HttpContext.Items["CurrentSession"] is Auth.Session currentSession) log.SessionId = currentSession.Id; fbs.Enqueue(log); } }