From 19d8bcb6904de54c341a26972d66c19fd31df69c Mon Sep 17 00:00:00 2001 From: RaidMax Date: Wed, 30 Jun 2021 21:13:25 -0500 Subject: [PATCH] add login/logout events to change tracker default guest profile to minimum permissions --- SharedLibraryCore/BaseController.cs | 2 +- SharedLibraryCore/Events/GameEvent.cs | 8 ++++++++ .../Services/ChangeHistoryService.cs | 18 ++++++++++++++++- .../Controllers/API/ClientController.cs | 19 ++++++++++++++++++ WebfrontCore/Controllers/AccountController.cs | 20 +++++++++++++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/SharedLibraryCore/BaseController.cs b/SharedLibraryCore/BaseController.cs index c9107042..fa92c424 100644 --- a/SharedLibraryCore/BaseController.cs +++ b/SharedLibraryCore/BaseController.cs @@ -61,7 +61,7 @@ namespace SharedLibraryCore Client ??= new EFClient() { ClientId = -1, - Level = EFClient.Permission.User, + Level = EFClient.Permission.Banned, CurrentAlias = new EFAlias() { Name = "Webfront Guest" } }; } diff --git a/SharedLibraryCore/Events/GameEvent.cs b/SharedLibraryCore/Events/GameEvent.cs index 974617b5..2248b02e 100644 --- a/SharedLibraryCore/Events/GameEvent.cs +++ b/SharedLibraryCore/Events/GameEvent.cs @@ -151,6 +151,14 @@ namespace SharedLibraryCore /// a client's permission was changed /// ChangePermission = 111, + /// + /// client logged in to webfront + /// + Login = 112, + /// + /// client logged out of webfront + /// + Logout = 113, // events "generated" by IW4MAdmin /// diff --git a/SharedLibraryCore/Services/ChangeHistoryService.cs b/SharedLibraryCore/Services/ChangeHistoryService.cs index 4aa4a3f6..3f6580ec 100644 --- a/SharedLibraryCore/Services/ChangeHistoryService.cs +++ b/SharedLibraryCore/Services/ChangeHistoryService.cs @@ -66,7 +66,23 @@ namespace SharedLibraryCore.Services CurrentValue = ((EFClient.Permission)e.Extra).ToString() }; break; - default: + 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 + }; break; } diff --git a/WebfrontCore/Controllers/API/ClientController.cs b/WebfrontCore/Controllers/API/ClientController.cs index 14a8eca7..f01de4e3 100644 --- a/WebfrontCore/Controllers/API/ClientController.cs +++ b/WebfrontCore/Controllers/API/ClientController.cs @@ -119,6 +119,14 @@ namespace WebfrontCore.Controllers.API var claimsIdentity = new ClaimsIdentity(claims, "login"); var claimsPrinciple = new ClaimsPrincipal(claimsIdentity); await SignInAsync(claimsPrinciple); + + Manager.AddEvent(new GameEvent() + { + Origin = privilegedClient, + Type = GameEvent.EventType.Login, + Owner = Manager.GetServers().First(), + Data = HttpContext.Connection.RemoteIpAddress.ToString() + }); return Ok(); } @@ -137,6 +145,17 @@ namespace WebfrontCore.Controllers.API [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task LogoutAsync() { + if (Authorized) + { + Manager.AddEvent(new GameEvent() + { + Origin = Client, + Type = GameEvent.EventType.Logout, + Owner = Manager.GetServers().First(), + Data = HttpContext.Connection.RemoteIpAddress.ToString() + }); + } + await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Ok(); diff --git a/WebfrontCore/Controllers/AccountController.cs b/WebfrontCore/Controllers/AccountController.cs index 6041e9c8..cd80294e 100644 --- a/WebfrontCore/Controllers/AccountController.cs +++ b/WebfrontCore/Controllers/AccountController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; using SharedLibraryCore; using SharedLibraryCore.Interfaces; using System; +using System.Linq; using System.Security.Claims; using System.Threading.Tasks; @@ -50,6 +51,14 @@ namespace WebfrontCore.Controllers var claimsIdentity = new ClaimsIdentity(claims, "login"); var claimsPrinciple = new ClaimsPrincipal(claimsIdentity); await SignInAsync(claimsPrinciple); + + Manager.AddEvent(new GameEvent() + { + Origin = privilegedClient, + Type = GameEvent.EventType.Login, + Owner = Manager.GetServers().First(), + Data = HttpContext.Connection.RemoteIpAddress.ToString() + }); return Ok(); } @@ -66,6 +75,17 @@ namespace WebfrontCore.Controllers [HttpGet] public async Task LogoutAsync() { + if (Authorized) + { + Manager.AddEvent(new GameEvent() + { + Origin = Client, + Type = GameEvent.EventType.Logout, + Owner = Manager.GetServers().First(), + Data = HttpContext.Connection.RemoteIpAddress.ToString() + }); + } + await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return RedirectToAction("Index", "Home"); }