From 4c6fcf8a117890d9a47deb7db1d306185af09f4b Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 2 Dec 2018 16:54:29 +0100 Subject: [PATCH] Added dynamic whitelist --- Model/DatabaseContext.cs | 3 +++ Server/Commands/Admin.cs | 49 ++++++++++++++++++++++++++++++++++++ Server/Entities/Whitelist.cs | 16 ++++++++++++ Server/Events/Connect.cs | 43 ++++++++++++++++--------------- 4 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 Server/Entities/Whitelist.cs diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index da6f835b..3d393416 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -91,5 +91,8 @@ namespace reallife_gamemode.Model // Server Vehicles public DbSet ServerVehicles { get; set; } public DbSet VehicleMods { get; set; } + + // Whitelist + public DbSet WhitelistEntries { get; set; } } } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 82657b0a..8bc26e4a 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -1883,6 +1883,55 @@ namespace reallife_gamemode.Server.Commands BankManager.SetMoney(player, business, amount, "Admin"); } + + [Command("whitelist", "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]")] + public void CmdAdminWhitelist(Client player, string option, string scName) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + option = option.ToLower(); + + if(option != "add" && option != "remove") + { + player.SendChatMessage("~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]"); + return; + } + + using(var dbContext = new DatabaseContext()) + { + if(option == "add") + { + if (dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist schon auf der Whitelist."); + return; + } + + Whitelist whitelist = new Whitelist { SocialClubName = scName.ToLower() }; + dbContext.WhitelistEntries.Add(whitelist); + + player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich zur Whitelist hinzugefügt."); + } + else if(option == "remove") + { + if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist nicht auf der Whitelist."); + return; + } + + Whitelist whitelist = dbContext.WhitelistEntries.FirstOrDefault(w => w.SocialClubName.ToLower() == scName.ToLower()); + dbContext.WhitelistEntries.Remove(whitelist); + + player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich aus der Whitelist entfernt."); + } + dbContext.SaveChanges(); + } + } #endregion #region ALevel1338 diff --git a/Server/Entities/Whitelist.cs b/Server/Entities/Whitelist.cs new file mode 100644 index 00000000..e195de72 --- /dev/null +++ b/Server/Entities/Whitelist.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace reallife_gamemode.Server.Entities +{ + public class Whitelist + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string SocialClubName { get; set; } + } +} diff --git a/Server/Events/Connect.cs b/Server/Events/Connect.cs index 5c7ac1df..63053ad1 100644 --- a/Server/Events/Connect.cs +++ b/Server/Events/Connect.cs @@ -21,37 +21,36 @@ namespace reallife_gamemode.Server.Events { class Connect : Script { - private List whitelistNames = new List() - { - "VegasZ", - "datgame_", - "xSprite", - "xPrike", - "xNccPlay", - }; [ServerEvent(Event.PlayerConnected)] public void OnPlayerConnected(Client player) { - if(!whitelistNames.Any(x => x == player.SocialClubName)) - { - player.TriggerEvent("disableLogin"); - player.Kick(); - - string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist."; - ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN); - - return; - } - player.SetData("isLoggedIn", false); player.Position = new Vector3(-1883.736, -781.4911, -10); player.FreezePosition = true; - string name = player.Name; - List playerlist = NAPI.Pools.GetAllPlayers(); - string msg = "~m~*** " + player.Name + "[" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")"; + NAPI.Util.ConsoleOutput(player.SocialClubName); + + using (var dbContext = new DatabaseContext()) + { + if(!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == player.SocialClubName.ToLower())) + { + player.TriggerEvent("disableLogin"); + + string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist."; + ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN); + + NAPI.Util.ConsoleOutput(player.Name + " tried to join without whitelist entry"); + + player.SendChatMessage("~m~Du stehst nicht auf der Whitelist"); + + player.Kick(); + return; + } + } + + string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")"; ChatService.BroadcastAdmin(msg, AdminLevel.ADMIN); }