46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using DysonNetwork.Shared.Cache;
 | 
						|
using DysonNetwork.Shared.GeoIp;
 | 
						|
using DysonNetwork.Shared.Models;
 | 
						|
 | 
						|
namespace DysonNetwork.Pass.Account;
 | 
						|
 | 
						|
public class ActionLogService(GeoIpService geo, FlushBufferService fbs)
 | 
						|
{
 | 
						|
    public void CreateActionLog(Guid accountId, string action, Dictionary<string, object> meta)
 | 
						|
    {
 | 
						|
        var log = new SnActionLog
 | 
						|
        {
 | 
						|
            Action = action,
 | 
						|
            AccountId = accountId,
 | 
						|
            Meta = meta,
 | 
						|
        };
 | 
						|
 | 
						|
        fbs.Enqueue(log);
 | 
						|
    }
 | 
						|
 | 
						|
    public void CreateActionLogFromRequest(string action, Dictionary<string, object> meta, HttpRequest request,
 | 
						|
        SnAccount? account = null)
 | 
						|
    {
 | 
						|
        var log = new SnActionLog
 | 
						|
        {
 | 
						|
            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 SnAccount 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 SnAuthSession currentSession)
 | 
						|
            log.SessionId = currentSession.Id;
 | 
						|
 | 
						|
        fbs.Enqueue(log);
 | 
						|
    }
 | 
						|
}
 |