Readded all my changes, I think.

This commit is contained in:
Graham Cantin 2011-07-21 04:14:42 -07:00
parent 395225ec28
commit 9b1c5fd230
2 changed files with 142 additions and 73 deletions

View file

@ -157,8 +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(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"));
@ -333,76 +333,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());
}
}
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)

View file

@ -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>