Merge pull request #528 from Olink/general-devel

Removed ip address from users, as well as changed /user add syntax to be...
This commit is contained in:
Lucas Nicodemus 2013-09-21 14:34:39 -07:00
commit 95969b203d
7 changed files with 34 additions and 166 deletions

View file

@ -593,41 +593,22 @@ namespace TShockAPI
string subcmd = args.Parameters[0];
// Add requires a username:password pair/ip address and a group specified.
// Add requires a username, password, and a group specified.
if (subcmd == "add")
{
var namepass = args.Parameters[1].Split(':');
var user = new User();
try
{
if (args.Parameters.Count > 2)
if (args.Parameters.Count == 4)
{
if (namepass.Length == 2)
{
user.Name = namepass[0];
user.Password = namepass[1];
user.Group = args.Parameters[2];
}
else if (namepass.Length == 1)
{
user.Address = namepass[0];
user.Group = args.Parameters[2];
user.Name = user.Address;
}
if (!string.IsNullOrEmpty(user.Address))
{
args.Player.SendSuccessMessage("IP address admin added. If they're logged in, tell them to rejoin.");
args.Player.SendSuccessMessage("WARNING: This is insecure! It would be better to use a user account instead.");
TShock.Users.AddUser(user);
Log.ConsoleInfo(args.Player.Name + " added IP " + user.Address + " to group " + user.Group);
}
else
{
args.Player.SendSuccessMessage("Account " + user.Name + " has been added to group " + user.Group + "!");
TShock.Users.AddUser(user);
Log.ConsoleInfo(args.Player.Name + " added Account " + user.Name + " to group " + user.Group);
}
user.Name = args.Parameters[1];
user.Password = args.Parameters[2];
user.Group = args.Parameters[3];
args.Player.SendSuccessMessage("Account " + user.Name + " has been added to group " + user.Group + "!");
TShock.Users.AddUser(user);
Log.ConsoleInfo(args.Player.Name + " added Account " + user.Name + " to group " + user.Group);
}
else
{
@ -644,13 +625,7 @@ namespace TShockAPI
else if (subcmd == "del" && args.Parameters.Count == 2)
{
var user = new User();
if (args.Parameters[1].Split('.').Count() ==4)
// changed to support dot character in usernames
// if (args.Parameters[1].Contains("."))
user.Address = args.Parameters[1];
else
user.Name = args.Parameters[1];
user.Name = args.Parameters[1];
try
{
@ -692,32 +667,16 @@ namespace TShockAPI
// Group changing requires a username or IP address, and a new group to set
else if (subcmd == "group")
{
var user = new User();
if (args.Parameters[1].Split('.').Count()==4)
//changed to support dot character in usernames
//if (args.Parameters[1].Contains("."))
user.Address = args.Parameters[1];
else
user.Name = args.Parameters[1];
var user = new User();
user.Name = args.Parameters[1];
try
{
if (args.Parameters.Count == 3)
{
if (!string.IsNullOrEmpty(user.Address))
{
args.Player.SendSuccessMessage("IP address " + user.Address + " has been changed to group " + args.Parameters[2] + "!");
TShock.Users.SetUserGroup(user, args.Parameters[2]);
Log.ConsoleInfo(args.Player.Name + " changed IP address " + user.Address + " to group " + args.Parameters[2] + ".");
}
else
{
args.Player.SendSuccessMessage("Account " + user.Name + " has been changed to group " + args.Parameters[2] + "!");
TShock.Users.SetUserGroup(user, args.Parameters[2]);
Log.ConsoleInfo(args.Player.Name + " changed account " + user.Name + " to group " + args.Parameters[2] + ".");
}
args.Player.SendSuccessMessage("Account " + user.Name + " has been changed to group " + args.Parameters[2] + "!");
TShock.Users.SetUserGroup(user, args.Parameters[2]);
Log.ConsoleInfo(args.Player.Name + " changed account " + user.Name + " to group " + args.Parameters[2] + ".");
}
else
{
@ -733,7 +692,7 @@ namespace TShockAPI
else if (subcmd == "help")
{
args.Player.SendInfoMessage("Use command help:");
args.Player.SendInfoMessage("/user add username:password group -- Adds a specified user");
args.Player.SendInfoMessage("/user add username password group -- Adds a specified user");
args.Player.SendInfoMessage("/user del username -- Removes a specified user");
args.Player.SendInfoMessage("/user password username newpassword -- Changes a user's password");
args.Player.SendInfoMessage("/user group username newgroup -- Changes a user's group");
@ -3251,7 +3210,7 @@ namespace TShockAPI
{
try
{
TShock.Users.AddUser(new User(args.Player.IP, "", "", "superadmin"));
TShock.Users.AddUser(new User("", "", "superadmin"));
args.Player.Group = TShock.Utils.GetGroup("superadmin");
args.Player.SendInfoMessage("This IP address is now superadmin. Please perform the following command:");
args.Player.SendInfoMessage("/user add <username>:<password> superadmin");

View file

@ -37,8 +37,7 @@ namespace TShockAPI.DB
new SqlColumn("ID", MySqlDbType.Int32) {Primary = true, AutoIncrement = true},
new SqlColumn("Username", MySqlDbType.VarChar, 32) {Unique = true},
new SqlColumn("Password", MySqlDbType.VarChar, 128),
new SqlColumn("Usergroup", MySqlDbType.Text),
new SqlColumn("IP", MySqlDbType.VarChar, 16)
new SqlColumn("Usergroup", MySqlDbType.Text)
);
var creator = new SqlTableCreator(db,
db.GetSqlType() == SqlType.Sqlite
@ -59,8 +58,8 @@ namespace TShockAPI.DB
int ret;
try
{
ret = database.Query("INSERT INTO Users (Username, Password, UserGroup, IP) VALUES (@0, @1, @2, @3);", user.Name,
TShock.Utils.HashPassword(user.Password), user.Group, user.Address);
ret = database.Query("INSERT INTO Users (Username, Password, UserGroup) VALUES (@0, @1, @2);", user.Name,
TShock.Utils.HashPassword(user.Password), user.Group);
}
catch (Exception ex)
{
@ -82,18 +81,10 @@ namespace TShockAPI.DB
{
try
{
int affected = -1;
if (!string.IsNullOrEmpty(user.Address))
{
affected = database.Query("DELETE FROM Users WHERE IP=@0", user.Address);
}
else
{
affected = database.Query("DELETE FROM Users WHERE Username=@0", user.Name);
}
int affected = database.Query("DELETE FROM Users WHERE Username=@0", user.Name);
if (affected < 1)
throw new UserNotExistException(string.IsNullOrEmpty(user.Address) ? user.Name : user.Address);
throw new UserNotExistException(user.Name);
}
catch (Exception ex)
{
@ -169,53 +160,6 @@ namespace TShockAPI.DB
return -1;
}
/// <summary>
/// Returns a Group for a ip from the database
/// </summary>
/// <param name="ply">string ip</param>
public Group GetGroupForIP(string ip)
{
try
{
using (var reader = database.QueryReader("SELECT * FROM Users WHERE IP=@0", ip))
{
if (reader.Read())
{
string group = reader.Get<string>("UserGroup");
return TShock.Utils.GetGroup(group);
}
}
}
catch (Exception ex)
{
Log.ConsoleError("GetGroupForIP SQL returned an error: " + ex);
}
return TShock.Utils.GetGroup(TShock.Config.DefaultGuestGroupName);
}
public Group GetGroupForIPExpensive(string ip)
{
try
{
using (var reader = database.QueryReader("SELECT IP, UserGroup FROM Users"))
{
while (reader.Read())
{
if (TShock.Utils.GetIPv4Address(reader.Get<string>("IP")) == ip)
{
return TShock.Utils.GetGroup(reader.Get<string>("UserGroup"));
}
}
}
}
catch (Exception ex)
{
Log.ConsoleError("GetGroupForIP SQL returned an error: " + ex);
}
return TShock.Utils.GetGroup(TShock.Config.DefaultGuestGroupName);
}
public User GetUserByName(string name)
{
try
@ -240,18 +184,6 @@ namespace TShockAPI.DB
}
}
public User GetUserByIP(string ip)
{
try
{
return GetUser(new User {Address = ip});
}
catch (UserManagerException)
{
return null;
}
}
public User GetUser(User user)
{
bool multiple = false;
@ -264,18 +196,12 @@ namespace TShockAPI.DB
arg = user.ID;
type = "id";
}
else if (string.IsNullOrEmpty(user.Address))
else
{
query = "SELECT * FROM Users WHERE Username=@0";
arg = user.Name;
type = "name";
}
else
{
query = "SELECT * FROM Users WHERE IP=@0";
arg = user.Address;
type = "ip";
}
try
{
@ -298,7 +224,7 @@ namespace TShockAPI.DB
if (multiple)
throw new UserManagerException(String.Format("Multiple users found for {0} '{1}'", type, arg));
throw new UserNotExistException(string.IsNullOrEmpty(user.Address) ? user.Name : user.Address);
throw new UserNotExistException(user.Name);
}
public List<User> GetUsers()
@ -328,7 +254,6 @@ namespace TShockAPI.DB
user.Group = result.Get<string>("Usergroup");
user.Password = result.Get<string>("Password");
user.Name = result.Get<string>("Username");
user.Address = result.Get<string>("IP");
return user;
}
}
@ -339,11 +264,9 @@ namespace TShockAPI.DB
public string Name { get; set; }
public string Password { get; set; }
public string Group { get; set; }
public string Address { get; set; }
public User(string ip, string name, string pass, string group)
public User(string name, string pass, string group)
{
Address = ip;
Name = name;
Password = pass;
Group = group;
@ -351,7 +274,6 @@ namespace TShockAPI.DB
public User()
{
Address = "";
Name = "";
Password = "";
Group = "";

View file

@ -1687,9 +1687,10 @@ namespace TShockAPI
var tiletype = args.Data.ReadInt8();
var fail = tiletype == 1;
var style = args.Data.ReadInt8();
if (OnTileEdit(args.Player, tileX, tileY, tiletype, type, fail, style))
return true;
if (!TShock.Utils.TileValid(tileX, tileY))
if (!TShock.Utils.TilePlacementValid(tileX, tileY))
return false;
if (args.Player.Dead && TShock.Config.PreventDeadModification)
@ -1835,8 +1836,8 @@ namespace TShockAPI
args.Player.SendTileSquare(tileX, tileY);
return true;
}
if ((TShock.Utils.TileValid(tileX, tileY + 1) && Main.tile[tileX, tileY + 1].type == 138) ||
(TShock.Utils.TileValid(tileX + 1, tileY + 1) && Main.tile[tileX + 1, tileY + 1].type == 138))
if ((TShock.Utils.TilePlacementValid(tileX, tileY + 1) && Main.tile[tileX, tileY + 1].type == 138) ||
(TShock.Utils.TilePlacementValid(tileX + 1, tileY + 1) && Main.tile[tileX + 1, tileY + 1].type == 138))
{
args.Player.SendTileSquare(tileX, tileY);
return true;

View file

@ -289,7 +289,6 @@ namespace TShockAPI
{"name", p.Name},
{"id", p.ID},
{"group", p.Group},
{"ip", p.Address},
}) } };
}
@ -308,7 +307,7 @@ namespace TShockAPI
return RestMissingParam("password");
// NOTE: ip can be blank
User user = new User(parameters["ip"], username, password, group);
User user = new User(username, password, group);
try
{
TShock.Users.AddUser(user);
@ -802,10 +801,6 @@ namespace TShockAPI
break;
case "id":
user = TShock.Users.GetUserByID(Convert.ToInt32(name));
break;
case "ip":
user = TShock.Users.GetUserByIP(name);
break;
default:
return RestError("Invalid Type: '" + type + "'");

View file

@ -129,9 +129,8 @@ namespace Rests
private RestObject NewTokenInternal(string username, string password)
{
User userAccount = TShock.Users.GetUserByName(username);
if (userAccount == null || !string.IsNullOrWhiteSpace(userAccount.Address))
return new RestObject("401")
{ Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." };
if (userAccount == null)
return new RestObject("401") { Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." };
if (!TShock.Utils.HashPassword(password).Equals(userAccount.Password, StringComparison.InvariantCultureIgnoreCase))
return new RestObject("401")

View file

@ -742,14 +742,6 @@ namespace TShockAPI
private void OnConnect(int ply, HandledEventArgs handler)
{
var player = new TSPlayer(ply);
if (Config.EnableDNSHostResolution)
{
player.Group = Users.GetGroupForIPExpensive(player.IP);
}
else
{
player.Group = Users.GetGroupForIP(player.IP);
}
if (Utils.ActivePlayers() + 1 > Config.MaxSlots + 20)
{

View file

@ -306,7 +306,7 @@ namespace TShockAPI
tileX = startTileX + Random.Next(tileXRange*-1, tileXRange);
tileY = startTileY + Random.Next(tileYRange*-1, tileYRange);
j++;
} while (TileValid(tileX, tileY) && !TileClear(tileX, tileY));
} while (TilePlacementValid(tileX, tileY) && !TileClear(tileX, tileY));
}
/// <summary>
@ -315,7 +315,7 @@ namespace TShockAPI
/// <param name="tileX">Location X</param>
/// <param name="tileY">Location Y</param>
/// <returns>If the tile is valid</returns>
public bool TileValid(int tileX, int tileY)
public bool TilePlacementValid(int tileX, int tileY)
{
return tileX >= 0 && tileX < Main.maxTilesX && tileY >= 0 && tileY < Main.maxTilesY;
}