Add remaining backbone for banning accounts (sort of)
Frontend still doesn't work properly. In particular: 1. Need a way to list bans by account name. 2. Need a way to unban by account name. 3. Really need a way to change the IP on a ban lol. Ban system still needs to be be rebuilt fully, but at least this doesn't necessarily character ban someone if you were going for an IP ban. Fixes #1412
This commit is contained in:
parent
0edfc6834f
commit
718525904a
5 changed files with 60 additions and 11 deletions
|
|
@ -1367,7 +1367,7 @@ namespace TShockAPI
|
|||
}
|
||||
|
||||
targetGeneralizedName = target.Name;
|
||||
success = TShock.Bans.AddBan(target.IP, target.Name, target.UUID, banReason, false, args.Player.User.Name,
|
||||
success = TShock.Bans.AddBan2(target.IP, target.Name, target.UUID, target.User.Name, banReason, false, args.Player.User.Name,
|
||||
banLengthInSeconds == 0 ? "" : banLengthInSeconds.ToString());
|
||||
|
||||
// Since this is an online ban, we need to dc the player and tell them now.
|
||||
|
|
@ -1397,7 +1397,7 @@ namespace TShockAPI
|
|||
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
|
||||
if (r.IsMatch(args.Parameters[1])) {
|
||||
targetGeneralizedName = "IP: " + args.Parameters[1];
|
||||
success = TShock.Bans.AddBan(args.Parameters[1], "", "", banReason,
|
||||
success = TShock.Bans.AddBan2(args.Parameters[1], "", "", "", banReason,
|
||||
false, args.Player.User.Name, banLengthInSeconds == 0 ? "" : banLengthInSeconds.ToString());
|
||||
if (success && offlineUser != null)
|
||||
{
|
||||
|
|
@ -1445,8 +1445,8 @@ namespace TShockAPI
|
|||
string lastIP = JsonConvert.DeserializeObject<List<string>>(offlineUser.KnownIps).Last();
|
||||
|
||||
success =
|
||||
TShock.Bans.AddBan(lastIP,
|
||||
offlineUser.Name, offlineUser.UUID, banReason, false, args.Player.User.Name,
|
||||
TShock.Bans.AddBan2(lastIP,
|
||||
"", offlineUser.UUID, offlineUser.Name, banReason, false, args.Player.User.Name,
|
||||
banLengthInSeconds == 0 ? "" : banLengthInSeconds.ToString());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,11 +43,11 @@ namespace TShockAPI.DB
|
|||
new SqlColumn("IP", MySqlDbType.String, 16) { Primary = true },
|
||||
new SqlColumn("Name", MySqlDbType.Text),
|
||||
new SqlColumn("UUID", MySqlDbType.Text),
|
||||
new SqlColumn("AccountName", MySqlDbType.Text),
|
||||
new SqlColumn("Reason", MySqlDbType.Text),
|
||||
new SqlColumn("BanningUser", MySqlDbType.Text),
|
||||
new SqlColumn("Date", MySqlDbType.Text),
|
||||
new SqlColumn("Expiration", MySqlDbType.Text)
|
||||
new SqlColumn("Expiration", MySqlDbType.Text),
|
||||
new SqlColumn("AccountName", MySqlDbType.Text)
|
||||
);
|
||||
var creator = new SqlTableCreator(db,
|
||||
db.GetSqlType() == SqlType.Sqlite
|
||||
|
|
@ -146,6 +146,32 @@ namespace TShockAPI.DB
|
|||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a ban by account name (not player/character name).
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="casesensitive">Whether to check with case sensitivity.</param>
|
||||
/// <returns>The ban.</returns>
|
||||
public Ban GetBanByAccountName(string name, bool casesensitive = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var namecol = casesensitive ? "AccountName" : "UPPER(AccountName)";
|
||||
if (!casesensitive)
|
||||
name = name.ToUpper();
|
||||
using (var reader = database.QueryReader("SELECT * FROM Bans WHERE " + namecol + "=@0", name))
|
||||
{
|
||||
if (reader.Read())
|
||||
return new Ban(reader.Get<string>("IP"), reader.Get<string>("Name"), reader.Get<string>("UUID"), reader.Get<string>("AccountName"), reader.Get<string>("Reason"), reader.Get<string>("BanningUser"), reader.Get<string>("Date"), reader.Get<string>("Expiration"));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
TShock.Log.Error(ex.ToString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a ban by UUID.
|
||||
/// </summary>
|
||||
|
|
@ -179,6 +205,7 @@ namespace TShockAPI.DB
|
|||
/// <param name="exceptions">If set to <c>true</c> enable throwing exceptions.</param>
|
||||
/// <param name="banner">Banner.</param>
|
||||
/// <param name="expiration">Expiration date.</param>
|
||||
[Obsolete("Use AddBan2 instead of AddBan.", true)]
|
||||
public bool AddBan(string ip, string name = "", string uuid = "", string reason = "", bool exceptions = false, string banner = "", string expiration = "")
|
||||
{
|
||||
return AddBan2(ip, name, uuid, "", reason, exceptions, banner, expiration);
|
||||
|
|
@ -209,7 +236,7 @@ namespace TShockAPI.DB
|
|||
}
|
||||
else
|
||||
{
|
||||
return database.Query("INSERT INTO Bans (IP, Name, UUID, AccountName, Reason, BanningUser, Date, Expiration) VALUES (@0, @1, @2, @3, @4, @5, @6, @7);", ip, name, uuid, accountName, reason, banner, DateTime.UtcNow.ToString("s"), expiration) != 0;
|
||||
return database.Query("INSERT INTO Bans (IP, Name, UUID, Reason, BanningUser, Date, Expiration, AccountName) VALUES (@0, @1, @2, @3, @4, @5, @6, @7);", ip, name, uuid, reason, banner, DateTime.UtcNow.ToString("s"), expiration, accountName) != 0;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
|||
|
|
@ -645,7 +645,7 @@ namespace TShockAPI
|
|||
|
||||
try
|
||||
{
|
||||
TShock.Bans.AddBan(ip, name, "", args.Parameters["reason"], true, args.TokenData.Username);
|
||||
TShock.Bans.AddBan2(ip, name, "", "", args.Parameters["reason"], true, args.TokenData.Username);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -1022,7 +1022,7 @@ namespace TShockAPI
|
|||
|
||||
TSPlayer player = (TSPlayer)ret;
|
||||
var reason = null == args.Parameters["reason"] ? "Banned via web" : args.Parameters["reason"];
|
||||
TShock.Bans.AddBan(player.IP, player.Name, "", reason);
|
||||
TShock.Bans.AddBan2(player.IP, player.Name, "", "", reason);
|
||||
TShock.Utils.ForceKick(player, reason, false, true);
|
||||
return RestResponse("Player " + player.Name + " was banned");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -472,6 +472,28 @@ namespace TShockAPI
|
|||
|
||||
args.Player.User.KnownIps = JsonConvert.SerializeObject(KnownIps, Formatting.Indented);
|
||||
Users.UpdateLogin(args.Player.User);
|
||||
|
||||
Ban potentialBan = Bans.GetBanByAccountName(args.Player.User.Name);
|
||||
|
||||
if (potentialBan != null)
|
||||
{
|
||||
// A user just signed in successfully despite being banned by account name.
|
||||
// We should fix the ban database so that all of their ban info is up to date.
|
||||
Bans.AddBan2(args.Player.IP, args.Player.Name, args.Player.UUID, args.Player.User.Name,
|
||||
potentialBan.Reason, false, potentialBan.BanningUser, potentialBan.Expiration);
|
||||
|
||||
// And then get rid of them.
|
||||
if (potentialBan.Expiration == "")
|
||||
{
|
||||
Utils.ForceKick(args.Player, String.Format("Permanently banned by {0} for {1}", potentialBan.BanningUser
|
||||
,potentialBan.Reason), false, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.ForceKick(args.Player, String.Format("Still banned by {0} for {1}", potentialBan.BanningUser,
|
||||
potentialBan.Reason), false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>OnAccountDelete - Internal hook fired on account delete.</summary>
|
||||
|
|
@ -488,7 +510,7 @@ namespace TShockAPI
|
|||
CharacterDB.SeedInitialData(Users.GetUser(args.User));
|
||||
}
|
||||
|
||||
/// <summary>OnPlayerPreLogin - Internal hook fired when on player pre login.</summary>
|
||||
/// <summary>OnPlayerPreLoginOnPlayerPreLogin - Internal hook fired when on player pre login.</summary>
|
||||
/// <param name="args">args - The PlayerPreLoginEventArgs object.</param>
|
||||
private void OnPlayerPreLogin(Hooks.PlayerPreLoginEventArgs args)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -675,7 +675,7 @@ namespace TShockAPI
|
|||
string ip = player.IP;
|
||||
string uuid = player.UUID;
|
||||
string playerName = player.Name;
|
||||
TShock.Bans.AddBan(ip, playerName, uuid, reason, false, adminUserName);
|
||||
TShock.Bans.AddBan2(ip, playerName, uuid, "", reason, false, adminUserName);
|
||||
player.Disconnect(string.Format("Banned: {0}", reason));
|
||||
string verb = force ? "force " : "";
|
||||
if (string.IsNullOrWhiteSpace(adminUserName))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue