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:
commit
95969b203d
7 changed files with 34 additions and 166 deletions
|
|
@ -593,41 +593,22 @@ namespace TShockAPI
|
||||||
|
|
||||||
string subcmd = args.Parameters[0];
|
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")
|
if (subcmd == "add")
|
||||||
{
|
{
|
||||||
var namepass = args.Parameters[1].Split(':');
|
|
||||||
var user = new User();
|
var user = new User();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count > 2)
|
if (args.Parameters.Count == 4)
|
||||||
{
|
{
|
||||||
if (namepass.Length == 2)
|
user.Name = args.Parameters[1];
|
||||||
{
|
user.Password = args.Parameters[2];
|
||||||
user.Name = namepass[0];
|
user.Group = args.Parameters[3];
|
||||||
user.Password = namepass[1];
|
|
||||||
user.Group = args.Parameters[2];
|
args.Player.SendSuccessMessage("Account " + user.Name + " has been added to group " + user.Group + "!");
|
||||||
}
|
TShock.Users.AddUser(user);
|
||||||
else if (namepass.Length == 1)
|
Log.ConsoleInfo(args.Player.Name + " added Account " + user.Name + " to group " + user.Group);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -644,13 +625,7 @@ namespace TShockAPI
|
||||||
else if (subcmd == "del" && args.Parameters.Count == 2)
|
else if (subcmd == "del" && args.Parameters.Count == 2)
|
||||||
{
|
{
|
||||||
var user = new User();
|
var user = new User();
|
||||||
if (args.Parameters[1].Split('.').Count() ==4)
|
user.Name = args.Parameters[1];
|
||||||
|
|
||||||
// changed to support dot character in usernames
|
|
||||||
// if (args.Parameters[1].Contains("."))
|
|
||||||
user.Address = args.Parameters[1];
|
|
||||||
else
|
|
||||||
user.Name = args.Parameters[1];
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -692,32 +667,16 @@ namespace TShockAPI
|
||||||
// Group changing requires a username or IP address, and a new group to set
|
// Group changing requires a username or IP address, and a new group to set
|
||||||
else if (subcmd == "group")
|
else if (subcmd == "group")
|
||||||
{
|
{
|
||||||
var user = new User();
|
var user = new User();
|
||||||
if (args.Parameters[1].Split('.').Count()==4)
|
user.Name = args.Parameters[1];
|
||||||
|
|
||||||
//changed to support dot character in usernames
|
|
||||||
//if (args.Parameters[1].Contains("."))
|
|
||||||
|
|
||||||
user.Address = args.Parameters[1];
|
|
||||||
else
|
|
||||||
user.Name = args.Parameters[1];
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count == 3)
|
if (args.Parameters.Count == 3)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(user.Address))
|
args.Player.SendSuccessMessage("Account " + user.Name + " has been changed to group " + args.Parameters[2] + "!");
|
||||||
{
|
TShock.Users.SetUserGroup(user, args.Parameters[2]);
|
||||||
args.Player.SendSuccessMessage("IP address " + user.Address + " has been changed to group " + args.Parameters[2] + "!");
|
Log.ConsoleInfo(args.Player.Name + " changed account " + user.Name + " 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] + ".");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -733,7 +692,7 @@ namespace TShockAPI
|
||||||
else if (subcmd == "help")
|
else if (subcmd == "help")
|
||||||
{
|
{
|
||||||
args.Player.SendInfoMessage("Use command 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 del username -- Removes a specified user");
|
||||||
args.Player.SendInfoMessage("/user password username newpassword -- Changes a user's password");
|
args.Player.SendInfoMessage("/user password username newpassword -- Changes a user's password");
|
||||||
args.Player.SendInfoMessage("/user group username newgroup -- Changes a user's group");
|
args.Player.SendInfoMessage("/user group username newgroup -- Changes a user's group");
|
||||||
|
|
@ -3251,7 +3210,7 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
try
|
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.Group = TShock.Utils.GetGroup("superadmin");
|
||||||
args.Player.SendInfoMessage("This IP address is now superadmin. Please perform the following command:");
|
args.Player.SendInfoMessage("This IP address is now superadmin. Please perform the following command:");
|
||||||
args.Player.SendInfoMessage("/user add <username>:<password> superadmin");
|
args.Player.SendInfoMessage("/user add <username>:<password> superadmin");
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,7 @@ namespace TShockAPI.DB
|
||||||
new SqlColumn("ID", MySqlDbType.Int32) {Primary = true, AutoIncrement = true},
|
new SqlColumn("ID", MySqlDbType.Int32) {Primary = true, AutoIncrement = true},
|
||||||
new SqlColumn("Username", MySqlDbType.VarChar, 32) {Unique = true},
|
new SqlColumn("Username", MySqlDbType.VarChar, 32) {Unique = true},
|
||||||
new SqlColumn("Password", MySqlDbType.VarChar, 128),
|
new SqlColumn("Password", MySqlDbType.VarChar, 128),
|
||||||
new SqlColumn("Usergroup", MySqlDbType.Text),
|
new SqlColumn("Usergroup", MySqlDbType.Text)
|
||||||
new SqlColumn("IP", MySqlDbType.VarChar, 16)
|
|
||||||
);
|
);
|
||||||
var creator = new SqlTableCreator(db,
|
var creator = new SqlTableCreator(db,
|
||||||
db.GetSqlType() == SqlType.Sqlite
|
db.GetSqlType() == SqlType.Sqlite
|
||||||
|
|
@ -59,8 +58,8 @@ namespace TShockAPI.DB
|
||||||
int ret;
|
int ret;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ret = database.Query("INSERT INTO Users (Username, Password, UserGroup, IP) VALUES (@0, @1, @2, @3);", user.Name,
|
ret = database.Query("INSERT INTO Users (Username, Password, UserGroup) VALUES (@0, @1, @2);", user.Name,
|
||||||
TShock.Utils.HashPassword(user.Password), user.Group, user.Address);
|
TShock.Utils.HashPassword(user.Password), user.Group);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -82,18 +81,10 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int affected = -1;
|
int affected = database.Query("DELETE FROM Users WHERE Username=@0", user.Name);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (affected < 1)
|
if (affected < 1)
|
||||||
throw new UserNotExistException(string.IsNullOrEmpty(user.Address) ? user.Name : user.Address);
|
throw new UserNotExistException(user.Name);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -169,53 +160,6 @@ namespace TShockAPI.DB
|
||||||
return -1;
|
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)
|
public User GetUserByName(string name)
|
||||||
{
|
{
|
||||||
try
|
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)
|
public User GetUser(User user)
|
||||||
{
|
{
|
||||||
bool multiple = false;
|
bool multiple = false;
|
||||||
|
|
@ -264,18 +196,12 @@ namespace TShockAPI.DB
|
||||||
arg = user.ID;
|
arg = user.ID;
|
||||||
type = "id";
|
type = "id";
|
||||||
}
|
}
|
||||||
else if (string.IsNullOrEmpty(user.Address))
|
else
|
||||||
{
|
{
|
||||||
query = "SELECT * FROM Users WHERE Username=@0";
|
query = "SELECT * FROM Users WHERE Username=@0";
|
||||||
arg = user.Name;
|
arg = user.Name;
|
||||||
type = "name";
|
type = "name";
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
query = "SELECT * FROM Users WHERE IP=@0";
|
|
||||||
arg = user.Address;
|
|
||||||
type = "ip";
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -298,7 +224,7 @@ namespace TShockAPI.DB
|
||||||
if (multiple)
|
if (multiple)
|
||||||
throw new UserManagerException(String.Format("Multiple users found for {0} '{1}'", type, arg));
|
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()
|
public List<User> GetUsers()
|
||||||
|
|
@ -328,7 +254,6 @@ namespace TShockAPI.DB
|
||||||
user.Group = result.Get<string>("Usergroup");
|
user.Group = result.Get<string>("Usergroup");
|
||||||
user.Password = result.Get<string>("Password");
|
user.Password = result.Get<string>("Password");
|
||||||
user.Name = result.Get<string>("Username");
|
user.Name = result.Get<string>("Username");
|
||||||
user.Address = result.Get<string>("IP");
|
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -339,11 +264,9 @@ namespace TShockAPI.DB
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Password { get; set; }
|
public string Password { get; set; }
|
||||||
public string Group { 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;
|
Name = name;
|
||||||
Password = pass;
|
Password = pass;
|
||||||
Group = group;
|
Group = group;
|
||||||
|
|
@ -351,7 +274,6 @@ namespace TShockAPI.DB
|
||||||
|
|
||||||
public User()
|
public User()
|
||||||
{
|
{
|
||||||
Address = "";
|
|
||||||
Name = "";
|
Name = "";
|
||||||
Password = "";
|
Password = "";
|
||||||
Group = "";
|
Group = "";
|
||||||
|
|
|
||||||
|
|
@ -1687,9 +1687,10 @@ namespace TShockAPI
|
||||||
var tiletype = args.Data.ReadInt8();
|
var tiletype = args.Data.ReadInt8();
|
||||||
var fail = tiletype == 1;
|
var fail = tiletype == 1;
|
||||||
var style = args.Data.ReadInt8();
|
var style = args.Data.ReadInt8();
|
||||||
|
|
||||||
if (OnTileEdit(args.Player, tileX, tileY, tiletype, type, fail, style))
|
if (OnTileEdit(args.Player, tileX, tileY, tiletype, type, fail, style))
|
||||||
return true;
|
return true;
|
||||||
if (!TShock.Utils.TileValid(tileX, tileY))
|
if (!TShock.Utils.TilePlacementValid(tileX, tileY))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (args.Player.Dead && TShock.Config.PreventDeadModification)
|
if (args.Player.Dead && TShock.Config.PreventDeadModification)
|
||||||
|
|
@ -1835,8 +1836,8 @@ namespace TShockAPI
|
||||||
args.Player.SendTileSquare(tileX, tileY);
|
args.Player.SendTileSquare(tileX, tileY);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((TShock.Utils.TileValid(tileX, tileY + 1) && Main.tile[tileX, tileY + 1].type == 138) ||
|
if ((TShock.Utils.TilePlacementValid(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))
|
(TShock.Utils.TilePlacementValid(tileX + 1, tileY + 1) && Main.tile[tileX + 1, tileY + 1].type == 138))
|
||||||
{
|
{
|
||||||
args.Player.SendTileSquare(tileX, tileY);
|
args.Player.SendTileSquare(tileX, tileY);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,6 @@ namespace TShockAPI
|
||||||
{"name", p.Name},
|
{"name", p.Name},
|
||||||
{"id", p.ID},
|
{"id", p.ID},
|
||||||
{"group", p.Group},
|
{"group", p.Group},
|
||||||
{"ip", p.Address},
|
|
||||||
}) } };
|
}) } };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -308,7 +307,7 @@ namespace TShockAPI
|
||||||
return RestMissingParam("password");
|
return RestMissingParam("password");
|
||||||
|
|
||||||
// NOTE: ip can be blank
|
// NOTE: ip can be blank
|
||||||
User user = new User(parameters["ip"], username, password, group);
|
User user = new User(username, password, group);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TShock.Users.AddUser(user);
|
TShock.Users.AddUser(user);
|
||||||
|
|
@ -802,10 +801,6 @@ namespace TShockAPI
|
||||||
break;
|
break;
|
||||||
case "id":
|
case "id":
|
||||||
user = TShock.Users.GetUserByID(Convert.ToInt32(name));
|
user = TShock.Users.GetUserByID(Convert.ToInt32(name));
|
||||||
break;
|
|
||||||
case "ip":
|
|
||||||
user = TShock.Users.GetUserByIP(name);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return RestError("Invalid Type: '" + type + "'");
|
return RestError("Invalid Type: '" + type + "'");
|
||||||
|
|
|
||||||
|
|
@ -129,9 +129,8 @@ namespace Rests
|
||||||
private RestObject NewTokenInternal(string username, string password)
|
private RestObject NewTokenInternal(string username, string password)
|
||||||
{
|
{
|
||||||
User userAccount = TShock.Users.GetUserByName(username);
|
User userAccount = TShock.Users.GetUserByName(username);
|
||||||
if (userAccount == null || !string.IsNullOrWhiteSpace(userAccount.Address))
|
if (userAccount == null)
|
||||||
return new RestObject("401")
|
return new RestObject("401") { Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." };
|
||||||
{ 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))
|
if (!TShock.Utils.HashPassword(password).Equals(userAccount.Password, StringComparison.InvariantCultureIgnoreCase))
|
||||||
return new RestObject("401")
|
return new RestObject("401")
|
||||||
|
|
|
||||||
|
|
@ -742,14 +742,6 @@ namespace TShockAPI
|
||||||
private void OnConnect(int ply, HandledEventArgs handler)
|
private void OnConnect(int ply, HandledEventArgs handler)
|
||||||
{
|
{
|
||||||
var player = new TSPlayer(ply);
|
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)
|
if (Utils.ActivePlayers() + 1 > Config.MaxSlots + 20)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -306,7 +306,7 @@ namespace TShockAPI
|
||||||
tileX = startTileX + Random.Next(tileXRange*-1, tileXRange);
|
tileX = startTileX + Random.Next(tileXRange*-1, tileXRange);
|
||||||
tileY = startTileY + Random.Next(tileYRange*-1, tileYRange);
|
tileY = startTileY + Random.Next(tileYRange*-1, tileYRange);
|
||||||
j++;
|
j++;
|
||||||
} while (TileValid(tileX, tileY) && !TileClear(tileX, tileY));
|
} while (TilePlacementValid(tileX, tileY) && !TileClear(tileX, tileY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -315,7 +315,7 @@ namespace TShockAPI
|
||||||
/// <param name="tileX">Location X</param>
|
/// <param name="tileX">Location X</param>
|
||||||
/// <param name="tileY">Location Y</param>
|
/// <param name="tileY">Location Y</param>
|
||||||
/// <returns>If the tile is valid</returns>
|
/// <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;
|
return tileX >= 0 && tileX < Main.maxTilesX && tileY >= 0 && tileY < Main.maxTilesY;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue