From f1c86a6216c767f8cab87f9cfd63c958f357e8ac Mon Sep 17 00:00:00 2001 From: high Date: Fri, 1 Jul 2011 17:08:42 -0400 Subject: [PATCH] BanManager now fully sql based --- TShockAPI/BanManager.cs | 89 +++++++++++++++++++++++++++-------------- TShockAPI/Commands.cs | 12 ++++-- 2 files changed, 66 insertions(+), 35 deletions(-) diff --git a/TShockAPI/BanManager.cs b/TShockAPI/BanManager.cs index 04d5a945..f62883ca 100644 --- a/TShockAPI/BanManager.cs +++ b/TShockAPI/BanManager.cs @@ -27,14 +27,8 @@ namespace TShockAPI { public class BanManager { - private DateTime LastLoad; private IDbConnection database; - /// - /// IP - Name - Reason - /// - private List Bans = new List(); - public BanManager(IDbConnection db) { database = db; @@ -49,19 +43,25 @@ namespace TShockAPI public Ban GetBanByIp(string ip) { - using (var com = database.CreateCommand()) + try { - com.CommandText = "SELECT * FROM Bans WHERE IP=@ip"; - AddParameter(com, "@ip", ip); - using (var reader = com.ExecuteReader()) + using (var com = database.CreateCommand()) { - if (reader.Read()) - return new Ban((string)reader["IP"], (string)reader["Name"], (string)reader["Reason"]); + com.CommandText = "SELECT * FROM Bans WHERE IP=@ip"; + AddParameter(com, "@ip", ip); + using (var reader = com.ExecuteReader()) + { + if (reader.Read()) + return new Ban((string)reader["IP"], (string)reader["Name"], (string)reader["Reason"]); + } } } + catch (SqliteExecutionException ex) + { + } return null; } - IDbDataParameter AddParameter(IDbCommand command, string name, object data) + static IDbDataParameter AddParameter(IDbCommand command, string name, object data) { var parm = command.CreateParameter(); parm.ParameterName = name; @@ -73,37 +73,64 @@ namespace TShockAPI public Ban GetBanByName(string name, bool casesensitive = true) { - using (var com = database.CreateCommand()) + try { - var namecol = casesensitive ? "Name" : "UPPER(Name)"; - if (!casesensitive) - name = name.ToUpper(); - com.CommandText = "SELECT *, COUNT(*) FROM Bans WHERE " + namecol + "=@name LIMIT 5"; - AddParameter(com, "@name", name); - using (var reader = com.ExecuteReader()) + using (var com = database.CreateCommand()) { - if (reader.Read()) - return new Ban((string)reader["IP"], (string)reader["Name"], (string)reader["Reason"]); + var namecol = casesensitive ? "Name" : "UPPER(Name)"; + if (!casesensitive) + name = name.ToUpper(); + com.CommandText = "SELECT *, COUNT(*) FROM Bans WHERE " + namecol + "=@name LIMIT 5"; + AddParameter(com, "@name", name); + using (var reader = com.ExecuteReader()) + { + if (reader.Read()) + return new Ban((string)reader["IP"], (string)reader["Name"], (string)reader["Reason"]); + } } } + catch (SqliteExecutionException ex) + { + } return null; } - public void AddBan(string ip, string name = "", string reason = "") + public bool AddBan(string ip, string name = "", string reason = "") { - using (var com = database.CreateCommand()) + try { - com.CommandText = "INSERT INTO Bans (IP, Name, Reason) VALUES (@ip, @name, @reason)"; - AddParameter(com, "@ip", ip); - AddParameter(com, "@name", name); - AddParameter(com, "@reason", reason); - com.ExecuteNonQuery(); + using (var com = database.CreateCommand()) + { + com.CommandText = "INSERT INTO Bans (IP, Name, Reason) VALUES (@ip, @name, @reason)"; + AddParameter(com, "@ip", ip); + AddParameter(com, "@name", name); + AddParameter(com, "@reason", reason); + com.ExecuteNonQuery(); + } + return true; } + catch (SqliteExecutionException ex) + { + } + return false; } - public void RemoveBan(Ban ban) + public bool RemoveBan(string ip) { - + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "DELETE FROM Bans WHERE IP=@ip"; + AddParameter(com, "@ip", ip); + com.ExecuteNonQuery(); + return true; + } + } + catch (SqliteExecutionException ex) + { + } + return false; } } diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index d5056e8a..0fa33de0 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -456,8 +456,10 @@ namespace TShockAPI var ban = TShock.Bans.GetBanByName(plStr); if (ban != null) { - TShock.Bans.RemoveBan(ban); - args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + if (TShock.Bans.RemoveBan(ban.IP)) + args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + else + args.Player.SendMessage(string.Format("Failed to Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); } else { @@ -482,8 +484,10 @@ namespace TShockAPI var ban = TShock.Bans.GetBanByIp(plStr); if (ban != null) { - TShock.Bans.RemoveBan(ban); - args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + if (TShock.Bans.RemoveBan(ban.IP)) + args.Player.SendMessage(string.Format("Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); + else + args.Player.SendMessage(string.Format("Failed to Unbanned {0} ({1})!", ban.Name, ban.IP), Color.Red); } else {