2021-03-22 11:09:25 -05:00
|
|
|
|
using SharedLibraryCore.Database.Models;
|
2018-09-16 15:34:16 -05:00
|
|
|
|
using System;
|
2019-02-17 13:16:48 -06:00
|
|
|
|
using System.Linq;
|
2018-09-16 15:34:16 -05:00
|
|
|
|
using System.Threading.Tasks;
|
2021-03-22 11:09:25 -05:00
|
|
|
|
using Data.Abstractions;
|
|
|
|
|
using Data.Models;
|
2020-11-11 17:31:26 -06:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
2018-09-16 15:34:16 -05:00
|
|
|
|
|
|
|
|
|
namespace SharedLibraryCore.Services
|
|
|
|
|
{
|
2020-11-27 21:52:52 -06:00
|
|
|
|
public class ChangeHistoryService
|
2018-09-16 15:34:16 -05:00
|
|
|
|
{
|
2020-11-11 17:31:26 -06:00
|
|
|
|
private readonly ILogger _logger;
|
2020-11-27 21:52:52 -06:00
|
|
|
|
private readonly IDatabaseContextFactory _contextFactory;
|
2020-11-11 17:31:26 -06:00
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
public ChangeHistoryService(ILogger<ChangeHistoryService> logger, IDatabaseContextFactory contextFactory)
|
2020-11-11 17:31:26 -06:00
|
|
|
|
{
|
|
|
|
|
_logger = logger;
|
2020-11-27 21:52:52 -06:00
|
|
|
|
_contextFactory = contextFactory;
|
2018-09-16 15:34:16 -05:00
|
|
|
|
}
|
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
public async Task Add(GameEvent e)
|
2018-09-16 15:34:16 -05:00
|
|
|
|
{
|
|
|
|
|
EFChangeHistory change = null;
|
|
|
|
|
|
|
|
|
|
switch (e.Type)
|
|
|
|
|
{
|
|
|
|
|
case GameEvent.EventType.Ban:
|
|
|
|
|
change = new EFChangeHistory()
|
|
|
|
|
{
|
|
|
|
|
OriginEntityId = e.Origin.ClientId,
|
|
|
|
|
TargetEntityId = e.Target.ClientId,
|
2020-04-26 21:12:49 -05:00
|
|
|
|
ImpersonationEntityId = e.ImpersonationOrigin?.ClientId,
|
2018-09-16 15:34:16 -05:00
|
|
|
|
TypeOfChange = EFChangeHistory.ChangeType.Ban,
|
|
|
|
|
Comment = e.Data
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case GameEvent.EventType.Command:
|
2019-02-17 18:48:40 -06:00
|
|
|
|
// this prevents passwords/tokens being logged into the database in plain text
|
2019-02-17 13:16:48 -06:00
|
|
|
|
if (e.Extra is Command cmd)
|
|
|
|
|
{
|
|
|
|
|
if (cmd.Name == "login" || cmd.Name == "setpassword")
|
|
|
|
|
{
|
|
|
|
|
e.Message = string.Join(' ', e.Message.Split(" ").Select((arg, index) => index > 0 ? "*****" : arg));
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-09-23 19:45:54 -05:00
|
|
|
|
change = new EFChangeHistory()
|
|
|
|
|
{
|
|
|
|
|
OriginEntityId = e.Origin.ClientId,
|
|
|
|
|
TargetEntityId = e.Target?.ClientId ?? 0,
|
2020-04-26 21:12:49 -05:00
|
|
|
|
ImpersonationEntityId = e.ImpersonationOrigin?.ClientId,
|
2018-09-23 19:45:54 -05:00
|
|
|
|
Comment = "Executed command",
|
|
|
|
|
CurrentValue = e.Message,
|
|
|
|
|
TypeOfChange = EFChangeHistory.ChangeType.Command
|
|
|
|
|
};
|
2018-09-16 15:34:16 -05:00
|
|
|
|
break;
|
|
|
|
|
case GameEvent.EventType.ChangePermission:
|
|
|
|
|
change = new EFChangeHistory()
|
|
|
|
|
{
|
|
|
|
|
OriginEntityId = e.Origin.ClientId,
|
|
|
|
|
TargetEntityId = e.Target.ClientId,
|
2020-04-26 21:12:49 -05:00
|
|
|
|
ImpersonationEntityId = e.ImpersonationOrigin?.ClientId,
|
2019-04-02 20:20:37 -05:00
|
|
|
|
Comment = "Changed permission level",
|
2018-09-16 15:34:16 -05:00
|
|
|
|
TypeOfChange = EFChangeHistory.ChangeType.Permission,
|
2019-03-24 21:34:20 -05:00
|
|
|
|
CurrentValue = ((EFClient.Permission)e.Extra).ToString()
|
2018-09-16 15:34:16 -05:00
|
|
|
|
};
|
|
|
|
|
break;
|
2021-06-30 21:13:25 -05:00
|
|
|
|
case GameEvent.EventType.Login:
|
|
|
|
|
change = new EFChangeHistory()
|
|
|
|
|
{
|
|
|
|
|
OriginEntityId = e.Origin.ClientId,
|
|
|
|
|
Comment = "Logged In To Webfront",
|
|
|
|
|
TypeOfChange = EFChangeHistory.ChangeType.Command,
|
|
|
|
|
CurrentValue = e.Data
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case GameEvent.EventType.Logout:
|
|
|
|
|
change = new EFChangeHistory()
|
|
|
|
|
{
|
|
|
|
|
OriginEntityId = e.Origin.ClientId,
|
|
|
|
|
Comment = "Logged Out of Webfront",
|
|
|
|
|
TypeOfChange = EFChangeHistory.ChangeType.Command,
|
|
|
|
|
CurrentValue = e.Data
|
|
|
|
|
};
|
2018-09-16 15:34:16 -05:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
if (change == null)
|
2018-09-16 15:34:16 -05:00
|
|
|
|
{
|
2020-11-27 21:52:52 -06:00
|
|
|
|
return;
|
2018-09-16 15:34:16 -05:00
|
|
|
|
}
|
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
await using var context = _contextFactory.CreateContext(false);
|
2018-09-16 15:34:16 -05:00
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
context.EFChangeHistory.Add(change);
|
2018-09-16 15:34:16 -05:00
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
await context.SaveChangesAsync();
|
|
|
|
|
}
|
2018-09-16 15:34:16 -05:00
|
|
|
|
|
2020-11-27 21:52:52 -06:00
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError(ex, "Could not persist change @{change}", change);
|
|
|
|
|
}
|
2018-09-16 15:34:16 -05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|