Refactor 'Id' to 'TicketNumber' and extend the identifier model

This commit is contained in:
Chris 2020-11-29 14:23:58 +10:30
parent cde4cc5f04
commit c71cf79125

View file

@ -71,7 +71,7 @@ namespace TShockAPI.DB
database = db; database = db;
var table = new SqlTable("PlayerBans", var table = new SqlTable("PlayerBans",
new SqlColumn("Id", MySqlDbType.Int32) { Primary = true, AutoIncrement = true }, new SqlColumn("TicketNumber", MySqlDbType.Int32) { Primary = true, AutoIncrement = true },
new SqlColumn("Identifier", MySqlDbType.Text), new SqlColumn("Identifier", MySqlDbType.Text),
new SqlColumn("Reason", MySqlDbType.Text), new SqlColumn("Reason", MySqlDbType.Text),
new SqlColumn("BanningUser", MySqlDbType.Text), new SqlColumn("BanningUser", MySqlDbType.Text),
@ -125,17 +125,17 @@ namespace TShockAPI.DB
if (!string.IsNullOrWhiteSpace(ip)) if (!string.IsNullOrWhiteSpace(ip))
{ {
InsertBan($"{Identifiers.IP}{ip}", reason, banningUser, start, end); InsertBan($"{Identifier.IP}{ip}", reason, banningUser, start, end);
} }
if (!string.IsNullOrWhiteSpace(account)) if (!string.IsNullOrWhiteSpace(account))
{ {
InsertBan($"{Identifiers.Account}{account}", reason, banningUser, start, end); InsertBan($"{Identifier.Account}{account}", reason, banningUser, start, end);
} }
if (!string.IsNullOrWhiteSpace(uuid)) if (!string.IsNullOrWhiteSpace(uuid))
{ {
InsertBan($"{Identifiers.UUID}{uuid}", reason, banningUser, start, end); InsertBan($"{Identifier.UUID}{uuid}", reason, banningUser, start, end);
} }
} }
} }
@ -248,12 +248,12 @@ namespace TShockAPI.DB
int rowsModified; int rowsModified;
if (fullDelete) if (fullDelete)
{ {
rowsModified = database.Query("DELETE FROM PlayerBans WHERE Id=@0", uniqueId); rowsModified = database.Query("DELETE FROM PlayerBans WHERE TicketNumber=@0", uniqueId);
_bans.Remove(uniqueId); _bans.Remove(uniqueId);
} }
else else
{ {
rowsModified = database.Query("UPDATE PlayerBans SET Expiration=@0 WHERE Id=@1", DateTime.UtcNow.Ticks, uniqueId); rowsModified = database.Query("UPDATE PlayerBans SET Expiration=@0 WHERE TicketNumber=@1", DateTime.UtcNow.Ticks, uniqueId);
_bans[uniqueId].ExpirationDateTime = DateTime.UtcNow; _bans[uniqueId].ExpirationDateTime = DateTime.UtcNow;
} }
@ -272,11 +272,11 @@ namespace TShockAPI.DB
return Bans[id]; return Bans[id];
} }
using (var reader = database.QueryReader("SELECT * FROM PlayerBans WHERE Id=@0", id)) using (var reader = database.QueryReader("SELECT * FROM PlayerBans WHERE TicketNumber=@0", id))
{ {
if (reader.Read()) if (reader.Read())
{ {
var uniqueId = reader.Get<int>("Id"); var uniqueId = reader.Get<int>("TicketNumber");
var identifier = reader.Get<string>("Identifier"); var identifier = reader.Get<string>("Identifier");
var reason = reader.Get<string>("Reason"); var reason = reader.Get<string>("Reason");
var banningUser = reader.Get<string>("BanningUser"); var banningUser = reader.Get<string>("BanningUser");
@ -308,7 +308,7 @@ namespace TShockAPI.DB
{ {
while (reader.Read()) while (reader.Read())
{ {
var uniqueId = reader.Get<int>("Id"); var uniqueId = reader.Get<int>("TicketNumber");
var ident = reader.Get<string>("Identifier"); var ident = reader.Get<string>("Identifier");
var id = reader.Get<string>("Identifier"); var id = reader.Get<string>("Identifier");
var reason = reader.Get<string>("Reason"); var reason = reader.Get<string>("Reason");
@ -342,7 +342,7 @@ namespace TShockAPI.DB
{ {
while (reader.Read()) while (reader.Read())
{ {
var uniqueId = reader.Get<int>("Id"); var uniqueId = reader.Get<int>("TicketNumber");
var identifier = reader.Get<string>("Identifier"); var identifier = reader.Get<string>("Identifier");
var reason = reader.Get<string>("Reason"); var reason = reader.Get<string>("Reason");
var banningUser = reader.Get<string>("BanningUser"); var banningUser = reader.Get<string>("BanningUser");
@ -374,7 +374,7 @@ namespace TShockAPI.DB
{ {
while (reader.Read()) while (reader.Read())
{ {
var uniqueId = reader.Get<int>("Id"); var uniqueId = reader.Get<int>("TicketNumber");
var identifier = reader.Get<string>("Identifier"); var identifier = reader.Get<string>("Identifier");
var reason = reader.Get<string>("Reason"); var reason = reader.Get<string>("Reason");
var banningUser = reader.Get<string>("BanningUser"); var banningUser = reader.Get<string>("BanningUser");
@ -528,26 +528,68 @@ namespace TShockAPI.DB
} }
/// <summary> /// <summary>
/// Contains constants for different identifier types known to TShock /// Describes an identifier used by the ban system
/// </summary> /// </summary>
public static class Identifiers public class Identifier
{ {
/// <summary> /// <summary>
/// IP identifier prefix constant /// Identifiers currently registered
/// </summary> /// </summary>
public const string IP = "ip:"; public static List<Identifier> Available = new List<Identifier>();
/// <summary> /// <summary>
/// UUID identifier prefix constant /// The prefix of the identifier. E.g, 'ip:'
/// </summary> /// </summary>
public const string UUID = "uuid:"; public string Prefix { get; }
/// <summary> /// <summary>
/// Player name identifier prefix constant /// Short description of the identifier and its basic usage
/// </summary> /// </summary>
public const string Name = "name:"; public string Description { get; set; }
/// <summary> /// <summary>
/// User account identifier prefix constant /// IP identifier
/// </summary> /// </summary>
public const string Account = "acc:"; public static Identifier IP = Register("ip:", $"An identifier for an IP Address in octet format. Eg., '{"127.0.0.1".Color(Utils.RedHighlight)}'.");
/// <summary>
/// UUID identifier
/// </summary>
public static Identifier UUID = Register("uuid:", "An identifier for a UUID.");
/// <summary>
/// Player name identifier
/// </summary>
public static Identifier Name = Register("name:", "An identifier for a character name.");
/// <summary>
/// User account identifier
/// </summary>
public static Identifier Account = Register("acc:", "An identifier for a TShock User Account name.");
private Identifier(string prefix, string description)
{
Prefix = prefix;
Description = description;
}
/// <summary>
/// Returns the identifier's prefix
/// </summary>
/// <returns></returns>
public override string ToString()
{
return Prefix;
}
/// <summary>
/// Registers a new identifier with the given prefix and description
/// </summary>
/// <param name="prefix"></param>
/// <param name="description"></param>
public static Identifier Register(string prefix, string description)
{
var ident = new Identifier(prefix, description);
Available.Add(ident);
return ident;
}
} }
/// <summary> /// <summary>