diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 90283e82..90cef522 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -338,23 +338,34 @@ namespace TShockAPI TShock.Utils.Kick(args.Player, "Too many invalid login attempts."); } - if (args.Parameters.Count != 2) - { - args.Player.SendMessage("Syntax: /login [username] [password]"); - args.Player.SendMessage("If you forgot your password, there is no way to recover it."); - return; - } + var user = TShock.Users.GetUserByName(args.Player.Name); + string encrPass = ""; + + if (args.Parameters.Count == 1) + { + user = TShock.Users.GetUserByName(args.Player.Name); + encrPass = TShock.Utils.HashPassword(args.Parameters[0]); + } + else if (args.Parameters.Count == 2 && TShock.Config.AllowLoginAnyUsername) + { + user = TShock.Users.GetUserByName(args.Parameters[0]); + encrPass = TShock.Utils.HashPassword(args.Parameters[1]); + } + else + { + args.Player.SendMessage("Syntax: /login [password]"); + args.Player.SendMessage("If you forgot your password, there is no way to recover it."); + return; + } try { - string encrPass = TShock.Utils.HashPassword(args.Parameters[1]); - var user = TShock.Users.GetUserByName(args.Parameters[0]); if (user == null) { args.Player.SendMessage("User by that name does not exist"); } else if (user.Password.ToUpper() == encrPass.ToUpper()) { - args.Player.PlayerData = TShock.InventoryDB.GetPlayerData(args.Player, TShock.Users.GetUserID(args.Parameters[0])); + args.Player.PlayerData = TShock.InventoryDB.GetPlayerData(args.Player, TShock.Users.GetUserID(user.Name)); if (TShock.Config.ServerSideInventory) { @@ -377,7 +388,7 @@ namespace TShockAPI args.Player.IgnoreActionsForDisabledArmor = "none"; args.Player.Group = TShock.Utils.GetGroup(user.Group); - args.Player.UserAccountName = args.Parameters[0]; + args.Player.UserAccountName = user.Name; args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName); args.Player.IsLoggedIn = true; args.Player.IgnoreActionsForInventory = "none"; @@ -385,13 +396,13 @@ namespace TShockAPI args.Player.PlayerData.CopyInventory(args.Player); TShock.InventoryDB.InsertPlayerData(args.Player); - args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen); - Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user: " + args.Parameters[0]); + args.Player.SendMessage("Authenticated as " + user.Name + " successfully.", Color.LimeGreen); + Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user: " + user.Name); } else { args.Player.SendMessage("Incorrect password", Color.LimeGreen); - Log.Warn(args.Player.IP + " failed to authenticate as user: " + args.Parameters[0]); + Log.Warn(args.Player.IP + " failed to authenticate as user: " + user.Name); args.Player.LoginAttempts++; } } diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index 3f215257..2532950a 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -195,6 +195,9 @@ namespace TShockAPI [Description("Allows users to register any username with /register")] public bool AllowRegisterAnyUsername; + [Description("Allows users to login with any username with /login")] + public bool AllowLoginAnyUsername; + public static ConfigFile Read(string path) { if (!File.Exists(path)) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 1bcaccc0..bb8c4b4d 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -53,13 +53,13 @@ namespace TShockAPI #region Events public class TileEditEventArgs : HandledEventArgs { - public float X { get; set; } - public float Y { get; set; } - public float Type { get; set; } - public float EditType { get; set; } + public int X { get; set; } + public int Y { get; set; } + public int Type { get; set; } + public byte EditType { get; set; } } public static HandlerList TileEdit; - public static bool OnTileEdit(float x, float y, float type, float editType) + public static bool OnTileEdit(int x, int y, int type, byte editType) { if (TileEdit == null) return false; diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 10fe0ad0..cbe6035b 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -25,13 +25,13 @@ namespace TShockAPI Rest.Register(new RestCommand("/users/read/{user}/info", UserInfo) {RequiresToken = true}); Rest.Register(new RestCommand("/users/destroy/{user}", UserDestroy) {RequiresToken = true}); Rest.Register(new RestCommand("/users/update/{user}", UserUpdate) {RequiresToken = true}); - + Rest.Register(new RestCommand("/users/activelist", UserList) {RequiresToken = true}); Rest.Register(new RestCommand("/bans/create", BanCreate) {RequiresToken = true}); Rest.Register(new RestCommand("/bans/read/{user}/info", BanInfo) {RequiresToken = true}); Rest.Register(new RestCommand("/bans/destroy/{user}", BanDestroy) {RequiresToken = true}); - Rest.Register(new RestCommand("/lists/players", UserList) {RequiresToken = true}); + Rest.Register(new RestCommand("/lists/players", PlayerList) {RequiresToken = true}); Rest.Register(new RestCommand("/world/read", WorldRead) {RequiresToken = true}); Rest.Register(new RestCommand("/world/meteor", WorldMeteor) {RequiresToken = true}); @@ -74,10 +74,19 @@ namespace TShockAPI private object UserList(RestVerbs verbs, IParameterCollection parameters) { - var activeplayers = Main.player.Where(p => p != null && p.active).ToList(); - string currentPlayers = string.Join(", ", activeplayers.Select(p => p.name)); var ret = new RestObject("200"); - ret["players"] = currentPlayers; + string playerlist = ""; + foreach (var TSPlayer in TShock.Players) + { + if (playerlist == "") + { + playerlist += TSPlayer.UserAccountName; + } else + { + playerlist += ", " + TSPlayer.UserAccountName; + } + } + ret["activeuesrs"] = playerlist; return ret; } @@ -329,6 +338,15 @@ namespace TShockAPI #region RestPlayerMethods + private object PlayerList(RestVerbs verbs, IParameterCollection parameters) + { + var activeplayers = Main.player.Where(p => p != null && p.active).ToList(); + string currentPlayers = string.Join(", ", activeplayers.Select(p => p.name)); + var ret = new RestObject("200"); + ret["players"] = currentPlayers; + return ret; + } + private object PlayerRead(RestVerbs verbs, IParameterCollection parameters) { var returnBlock = new Dictionary();