Changed login event to prelogin and postlogin, if you set the args of prelogin to true, the login is ignored. In this case, if the server is loginbeforejoin, you need to kick the player with whatever reason otherwise bad things will happen.
This commit is contained in:
parent
6fdada2e7e
commit
89571174ec
3 changed files with 42 additions and 11 deletions
|
|
@ -381,17 +381,22 @@ namespace TShockAPI
|
||||||
TShock.Utils.Kick(args.Player, "Too many invalid login attempts.");
|
TShock.Utils.Kick(args.Player, "Too many invalid login attempts.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
User user = TShock.Users.GetUserByName(args.Player.Name);
|
User user = TShock.Users.GetUserByName(args.Player.Name);
|
||||||
string encrPass = "";
|
string encrPass = "";
|
||||||
|
|
||||||
if (args.Parameters.Count == 1)
|
if (args.Parameters.Count == 1)
|
||||||
{
|
{
|
||||||
|
if (Hooks.PlayerHooks.OnPlayerPreLogin(args.Player, args.Player.Name, args.Parameters[0]))
|
||||||
|
return;
|
||||||
user = TShock.Users.GetUserByName(args.Player.Name);
|
user = TShock.Users.GetUserByName(args.Player.Name);
|
||||||
encrPass = TShock.Utils.HashPassword(args.Parameters[0]);
|
encrPass = TShock.Utils.HashPassword(args.Parameters[0]);
|
||||||
}
|
}
|
||||||
else if (args.Parameters.Count == 2 && TShock.Config.AllowLoginAnyUsername)
|
else if (args.Parameters.Count == 2 && TShock.Config.AllowLoginAnyUsername)
|
||||||
{
|
{
|
||||||
|
if (Hooks.PlayerHooks.OnPlayerPreLogin(args.Player, args.Parameters[0], args.Parameters[1]))
|
||||||
|
return;
|
||||||
|
|
||||||
user = TShock.Users.GetUserByName(args.Parameters[0]);
|
user = TShock.Users.GetUserByName(args.Parameters[0]);
|
||||||
encrPass = TShock.Utils.HashPassword(args.Parameters[1]);
|
encrPass = TShock.Utils.HashPassword(args.Parameters[1]);
|
||||||
if (String.IsNullOrEmpty(args.Parameters[0]))
|
if (String.IsNullOrEmpty(args.Parameters[0]))
|
||||||
|
|
@ -408,6 +413,7 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// TODO: Is this needed? It seems to be an unreachable case
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
args.Player.SendErrorMessage("A user by that name does not exist.");
|
args.Player.SendErrorMessage("A user by that name does not exist.");
|
||||||
|
|
@ -464,7 +470,7 @@ namespace TShockAPI
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Hooks.PlayerHooks.OnPlayerLogin(args.Player);
|
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1336,6 +1336,10 @@ namespace TShockAPI
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
string password = Encoding.UTF8.GetString(args.Data.ReadBytes((int) (args.Data.Length - args.Data.Position - 1)));
|
string password = Encoding.UTF8.GetString(args.Data.ReadBytes((int) (args.Data.Length - args.Data.Position - 1)));
|
||||||
|
|
||||||
|
if (Hooks.PlayerHooks.OnPlayerPreLogin(args.Player, args.Player.Name, password))
|
||||||
|
return true;
|
||||||
|
|
||||||
var user = TShock.Users.GetUserByName(args.Player.Name);
|
var user = TShock.Users.GetUserByName(args.Player.Name);
|
||||||
if (user != null && !TShock.Config.DisableLoginBeforeJoin)
|
if (user != null && !TShock.Config.DisableLoginBeforeJoin)
|
||||||
{
|
{
|
||||||
|
|
@ -1385,7 +1389,7 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
args.Player.SendMessage("Authenticated as " + args.Player.Name + " successfully.", Color.LimeGreen);
|
args.Player.SendMessage("Authenticated as " + args.Player.Name + " successfully.", Color.LimeGreen);
|
||||||
Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
|
Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
|
||||||
Hooks.PlayerHooks.OnPlayerLogin(args.Player);
|
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
TShock.Utils.ForceKick(args.Player, "Invalid user account password.", true);
|
TShock.Utils.ForceKick(args.Player, "Invalid user account password.", true);
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,22 @@ using System.Text;
|
||||||
|
|
||||||
namespace TShockAPI.Hooks
|
namespace TShockAPI.Hooks
|
||||||
{
|
{
|
||||||
public class PlayerLoginEventArgs
|
public class PlayerPostLoginEventArgs
|
||||||
{
|
{
|
||||||
public TSPlayer Player { get; set; }
|
public TSPlayer Player { get; set; }
|
||||||
public PlayerLoginEventArgs(TSPlayer ply)
|
public PlayerPostLoginEventArgs(TSPlayer ply)
|
||||||
{
|
{
|
||||||
Player = ply;
|
Player = ply;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class PlayerPreLoginEventArgs : HandledEventArgs
|
||||||
|
{
|
||||||
|
public TSPlayer Player { get; set; }
|
||||||
|
public string LoginName { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class PlayerCommandEventArgs : HandledEventArgs
|
public class PlayerCommandEventArgs : HandledEventArgs
|
||||||
{
|
{
|
||||||
public TSPlayer Player { get; set; }
|
public TSPlayer Player { get; set; }
|
||||||
|
|
@ -25,20 +32,24 @@ namespace TShockAPI.Hooks
|
||||||
|
|
||||||
public static class PlayerHooks
|
public static class PlayerHooks
|
||||||
{
|
{
|
||||||
public delegate void PlayerLoginD(PlayerLoginEventArgs e);
|
public delegate void PlayerPostLoginD(PlayerPostLoginEventArgs e);
|
||||||
public static event PlayerLoginD PlayerLogin;
|
public static event PlayerPostLoginD PlayerPostLogin;
|
||||||
|
|
||||||
|
public delegate void PlayerPreLoginD(PlayerPreLoginEventArgs e);
|
||||||
|
public static event PlayerPreLoginD PlayerPreLogin;
|
||||||
|
|
||||||
public delegate void PlayerCommandD(PlayerCommandEventArgs e);
|
public delegate void PlayerCommandD(PlayerCommandEventArgs e);
|
||||||
public static event PlayerCommandD PlayerCommand;
|
public static event PlayerCommandD PlayerCommand;
|
||||||
|
|
||||||
public static void OnPlayerLogin(TSPlayer ply)
|
public static void OnPlayerPostLogin(TSPlayer ply)
|
||||||
{
|
{
|
||||||
if(PlayerLogin == null)
|
if(PlayerPostLogin == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerLoginEventArgs args = new PlayerLoginEventArgs(ply);
|
PlayerPostLoginEventArgs args = new PlayerPostLoginEventArgs(ply);
|
||||||
PlayerLogin(args);
|
PlayerPostLogin(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool OnPlayerCommand(TSPlayer player, string cmdName, string cmdText, List<string> args)
|
public static bool OnPlayerCommand(TSPlayer player, string cmdName, string cmdText, List<string> args)
|
||||||
|
|
@ -58,5 +69,15 @@ namespace TShockAPI.Hooks
|
||||||
PlayerCommand(playerCommandEventArgs);
|
PlayerCommand(playerCommandEventArgs);
|
||||||
return playerCommandEventArgs.Handled;
|
return playerCommandEventArgs.Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool OnPlayerPreLogin(TSPlayer ply, string name, string pass)
|
||||||
|
{
|
||||||
|
if (PlayerPreLogin == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var args = new PlayerPreLoginEventArgs {Player = ply, LoginName = name, Password = pass};
|
||||||
|
PlayerPreLogin(args);
|
||||||
|
return args.Handled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue