From 2cd7abf0bdc9a2532bc2ae381bc57f7540e9bcbc Mon Sep 17 00:00:00 2001 From: "Robin C. Ladiges" Date: Wed, 22 Mar 2023 21:46:44 +0100 Subject: [PATCH] add command: `unban ip ` To remove a banned IPv4 address from the ban list. --- Server/BanLists.cs | 40 ++++++++++++++++++++++++++++++++++++++++ Server/Program.cs | 3 ++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Server/BanLists.cs b/Server/BanLists.cs index 15ecde1..b1194a0 100644 --- a/Server/BanLists.cs +++ b/Server/BanLists.cs @@ -94,6 +94,20 @@ public static class BanLists { } + private static void UnbanIPv4(Client user) { + IPEndPoint? ipv4 = (IPEndPoint?) user.Socket?.RemoteEndPoint; + if (ipv4 != null) { + UnbanIPv4(ipv4.Address); + } + } + private static void UnbanIPv4(IPAddress ipv4) { + UnbanIPv4(ipv4.ToString()); + } + private static void UnbanIPv4(string ipv4) { + IPs.Remove(ipv4); + } + + private static void Save() { Settings.SaveSettings(true); } @@ -185,4 +199,30 @@ public static class BanLists { return "Banned ip: " + args[0]; } } + + + public static string HandleUnbanCommand(string[] args) { + if (args.Length != 2) { + return "Usage: unban ip "; + } + + string cmd = args[0]; + string val = args[1]; + + switch (cmd) { + default: + return "Usage: unban ip "; + + case "ip": + if (!IsIPv4(val)) { + return "Invalid IPv4 address!"; + } + if (!IsIPv4Banned(val)) { + return "IP " + val + " is not banned."; + } + UnbanIPv4(val); + Save(); + return "Unbanned ip: " + val; + } + } } diff --git a/Server/Program.cs b/Server/Program.cs index 99f583d..1ae5933 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -313,7 +313,8 @@ CommandHandler.RegisterCommand("crash", args => { return sb.ToString(); }); -CommandHandler.RegisterCommand("ban", args => { return BanLists.HandleBanCommand(args, (args) => MultiUserCommandHelper(args)); }); +CommandHandler.RegisterCommand("ban", args => { return BanLists.HandleBanCommand(args, (args) => MultiUserCommandHelper(args)); }); +CommandHandler.RegisterCommand("unban", args => { return BanLists.HandleUnbanCommand(args); }); CommandHandler.RegisterCommand("send", args => { const string optionUsage = "Usage: send ";