Merge branch 'general-devel' of github.com:TShock/TShock into general-devel
This commit is contained in:
commit
529f51d95e
4 changed files with 160 additions and 55 deletions
|
|
@ -157,6 +157,8 @@ namespace TShockAPI
|
|||
ChatCommands.Add(new Command(PartyChat, "p"));
|
||||
ChatCommands.Add(new Command(Rules, "rules"));
|
||||
ChatCommands.Add(new Command("logs", DisplayLogs, "displaylogs"));
|
||||
ChatCommands.Add(new Command(PasswordUser, "password") { DoLog = false });
|
||||
ChatCommands.Add(new Command(RegisterUser, "register") { DoLog = false });
|
||||
ChatCommands.Add(new Command("root-only", ManageUsers, "user") { DoLog = false });
|
||||
ChatCommands.Add(new Command("root-only", GrabUserIP, "ip"));
|
||||
ChatCommands.Add(new Command("root-only", AuthVerify, "auth-verify"));
|
||||
|
|
@ -332,6 +334,76 @@ namespace TShockAPI
|
|||
|
||||
}
|
||||
|
||||
private static void PasswordUser(CommandArgs args)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
if (args.Player.IsLoggedIn && args.Parameters.Count == 2)
|
||||
{
|
||||
var user = TShock.Users.GetUserByName(args.Player.UserAccountName);
|
||||
string encrPass = Tools.HashPassword(args.Parameters[0]);
|
||||
string[] exr = TShock.Users.FetchHashedPasswordAndGroup(args.Player.UserAccountName);
|
||||
if (exr[0].ToUpper() == encrPass.ToUpper())
|
||||
{
|
||||
args.Player.SendMessage("You changed your password!", Color.Green);
|
||||
TShock.Users.SetUserPassword(user, args.Parameters[1]); // SetUserPassword will hash it for you.
|
||||
Log.ConsoleInfo(args.Player.IP + " named " + args.Player.Name + " changed the password of Account " + user.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendMessage("You failed to change your password!", Color.Red);
|
||||
Log.ConsoleError(args.Player.IP + " named " + args.Player.Name + " failed to change password for Account: " + user.Name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendMessage("Not Logged in or Invalid syntax! Proper syntax: /password <oldpassword> <newpassword>", Color.Red);
|
||||
}
|
||||
}
|
||||
catch (UserManagerException ex)
|
||||
{
|
||||
args.Player.SendMessage("Sorry, an error occured: " + ex.Message, Color.Green);
|
||||
Log.ConsoleError("RegisterUser returned an error: " + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private static void RegisterUser(CommandArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (args.Parameters.Count == 2)
|
||||
{
|
||||
var user = new User();
|
||||
user.Name = args.Parameters[0];
|
||||
user.Password = args.Parameters[1];
|
||||
user.Group = "default"; // FIXME -- we should get this from the DB.
|
||||
|
||||
if (TShock.Users.GetUserByName(user.Name) == null) // Cheap way of checking for existance of a user
|
||||
{
|
||||
args.Player.SendMessage("Account " + user.Name + " has been registered.", Color.Green);
|
||||
TShock.Users.AddUser(user);
|
||||
Log.ConsoleInfo(args.Player.Name + " registered an Account: " + user.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendMessage("Account " + user.Name + " has already been registered.", Color.Green);
|
||||
Log.ConsoleInfo(args.Player.Name + " failed to register an existing Account: " + user.Name);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendMessage("Invalid syntax! Proper syntax: /register <username> <password>", Color.Red);
|
||||
}
|
||||
}
|
||||
catch (UserManagerException ex)
|
||||
{
|
||||
args.Player.SendMessage("Sorry, an error occured: " + ex.Message, Color.Green);
|
||||
Log.ConsoleError("RegisterUser returned an error: " + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
//Todo: Add separate help text for '/user add' and '/user del'. Also add '/user addip' and '/user delip'
|
||||
|
||||
private static void ManageUsers(CommandArgs args)
|
||||
|
|
|
|||
|
|
@ -99,7 +99,10 @@ namespace TShockAPI.DB
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Adds a given username to the database
|
||||
/// </summary>
|
||||
/// <param name="user">User user</param>
|
||||
public void AddUser(User user)
|
||||
{
|
||||
try
|
||||
|
|
@ -129,6 +132,10 @@ namespace TShockAPI.DB
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a given username from the database
|
||||
/// </summary>
|
||||
/// <param name="user">User user</param>
|
||||
public void RemoveUser(User user)
|
||||
{
|
||||
try
|
||||
|
|
@ -159,6 +166,68 @@ namespace TShockAPI.DB
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Sets the Hashed Password for a given username
|
||||
/// </summary>
|
||||
/// <param name="user">User user</param>
|
||||
/// <param name="group">string password</param>
|
||||
public void SetUserPassword(User user, string password)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var com = database.CreateCommand())
|
||||
{
|
||||
com.CommandText = "UPDATE Users SET Password = @password WHERE Username = @name;";
|
||||
com.AddParameter("@name", user.Name);
|
||||
com.AddParameter("@password", Tools.HashPassword(password));
|
||||
|
||||
using (var reader = com.ExecuteReader())
|
||||
{
|
||||
if (reader.RecordsAffected < 1)
|
||||
throw new UserExistsException(user.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new UserManagerException("SetUserPassword SQL returned an error", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the group for a given username
|
||||
/// </summary>
|
||||
/// <param name="user">User user</param>
|
||||
/// <param name="group">string group</param>
|
||||
public void SetUserGroup(User user, string group)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var com = database.CreateCommand())
|
||||
{
|
||||
com.CommandText = "UPDATE Users SET UserGroup = @group WHERE Username = @name;";
|
||||
com.AddParameter("@name", user.Name);
|
||||
|
||||
if (!TShock.Groups.GroupExists(group))
|
||||
throw new GroupNotExistsException(group);
|
||||
|
||||
com.AddParameter("@group", group);
|
||||
|
||||
using (var reader = com.ExecuteReader())
|
||||
{
|
||||
if (reader.RecordsAffected < 1)
|
||||
throw new UserExistsException(user.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new UserManagerException("SetUserGroup SQL returned an error", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Fetches the hashed password and group for a given username
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -110,9 +110,16 @@ namespace TShockAPI
|
|||
{PacketTypes.PlayerKillMe, HandlePlayerKillMe},
|
||||
{PacketTypes.LiquidSet, HandleLiquidSet},
|
||||
{PacketTypes.PlayerSpawn, HandleSpawn},
|
||||
{PacketTypes.SyncPlayers, HandleSync},
|
||||
};
|
||||
}
|
||||
|
||||
private static bool HandleSync(GetDataHandlerArgs args)
|
||||
{
|
||||
Debug.WriteLine("FUCK SYNCS");
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool HandlerGetData(PacketTypes type, TSPlayer player, MemoryStream data)
|
||||
{
|
||||
GetDataHandlerDelegate handler;
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ namespace TShockAPI
|
|||
NetHooks.GetData += GetData;
|
||||
NetHooks.GreetPlayer += OnGreetPlayer;
|
||||
NpcHooks.StrikeNpc += NpcHooks_OnStrikeNpc;
|
||||
NetHooks.SendData += new NetHooks.SendDataD(NetHooks_SendData);
|
||||
|
||||
GetDataHandlers.InitGetDataHandler();
|
||||
Commands.InitCommands();
|
||||
|
|
@ -196,6 +197,14 @@ namespace TShockAPI
|
|||
Log.ConsoleInfo("Backups " + (Backups.Interval > 0 ? "Enabled" : "Disabled"));
|
||||
}
|
||||
|
||||
void NetHooks_SendData(SendDataEventArgs e)
|
||||
{
|
||||
if (e.MsgID == PacketTypes.PlayerActive)
|
||||
{
|
||||
//Debug.WriteLine("Send: {0} ({1:X2})", (byte)e.MsgID, e.MsgID.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public override void DeInitialize()
|
||||
{
|
||||
DB.Close();
|
||||
|
|
@ -557,8 +566,8 @@ namespace TShockAPI
|
|||
return;
|
||||
}
|
||||
|
||||
if (Main.verboseNetplay)
|
||||
Debug.WriteLine("{0:X} ({2}): {3} ({1:XX})", player.Index, (byte)type, player.TPlayer.dead ? "dead " : "alive", type.ToString());
|
||||
//if (type == PacketTypes.SyncPlayers)
|
||||
//Debug.WriteLine("Recv: {0:X} ({2}): {3} ({1:XX})", player.Index, (byte)type, player.TPlayer.dead ? "dead " : "alive", type.ToString());
|
||||
|
||||
// Stop accepting updates from player as this player is going to be kicked/banned during OnUpdate (different thread so can produce race conditions)
|
||||
if ((TShock.Config.BanKillTileAbusers || TShock.Config.KickKillTileAbusers) && player.TileThreshold >= TShock.Config.TileThreshold && !player.Group.HasPermission("ignoregriefdetection"))
|
||||
|
|
@ -738,57 +747,5 @@ namespace TShockAPI
|
|||
}
|
||||
|
||||
|
||||
static readonly Dictionary<byte, string> MsgNames = new Dictionary<byte, string>()
|
||||
{
|
||||
{1, "Connect Request"},
|
||||
{2, "Disconnect"},
|
||||
{3, "Continue Connecting"},
|
||||
{4, "Player Info"},
|
||||
{5, "Player Slot"},
|
||||
{6, "Continue Connecting (2)"},
|
||||
{7, "World Info"},
|
||||
{8, "Tile Get Section"},
|
||||
{9, "Status"},
|
||||
{10, "Tile Send Section"},
|
||||
{11, "Tile Frame Section"},
|
||||
{12, "Player Spawn"},
|
||||
{13, "Player Update"},
|
||||
{14, "Player Active"},
|
||||
{15, "Sync Players"},
|
||||
{16, "Player HP"},
|
||||
{17, "Tile"},
|
||||
{18, "Time Set"},
|
||||
{19, "Door Use"},
|
||||
{20, "Tile Send Square"},
|
||||
{21, "Item Drop"},
|
||||
{22, "Item Owner"},
|
||||
{23, "Npc Update"},
|
||||
{24, "Npc Item Strike"},
|
||||
{25, "Chat Text"},
|
||||
{26, "Player Damage"},
|
||||
{27, "Projectile New"},
|
||||
{28, "Npc Strike"},
|
||||
{29, "Projectile Destroy"},
|
||||
{30, "Toggle PVP"},
|
||||
{31, "Chest Get Contents"},
|
||||
{32, "Chest Item"},
|
||||
{33, "Chest Open"},
|
||||
{34, "Tile Kill"},
|
||||
{35, "Effect Heal"},
|
||||
{36, "Zones"},
|
||||
{37, "Password Requied"},
|
||||
{38, "Password Send"},
|
||||
{39, "Item Unown"},
|
||||
{40, "Npc Talk"},
|
||||
{41, "Player Animation"},
|
||||
{42, "Player Mana"},
|
||||
{43, "Effect Mana"},
|
||||
{44, "Player Kill Me"},
|
||||
{45, "Player Team"},
|
||||
{46, "Sign Read"},
|
||||
{47, "Sign New"},
|
||||
{48, "Liquid Set"},
|
||||
{49, "Player Spawn Self"},
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue