Moving password related commands to own thread
This commit is contained in:
parent
66dcce30b7
commit
a9172ed157
|
@ -10,7 +10,7 @@ loader_version=0.8.7+build.201
|
||||||
fabric_version=0.11.8+build.357-1.16
|
fabric_version=0.11.8+build.357-1.16
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 1.4.3
|
mod_version = 1.4.4
|
||||||
maven_group = org.samo_lego
|
maven_group = org.samo_lego
|
||||||
archives_base_name = simpleauth
|
archives_base_name = simpleauth
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,10 @@ public class SimpleAuth implements DedicatedServerModInitializer {
|
||||||
world.updateListeners(pos.up(), world.getBlockState(pos.up()), world.getBlockState(pos.up()), 3);
|
world.updateListeners(pos.up(), world.getBlockState(pos.up()), world.getBlockState(pos.up()), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setting last air to player
|
||||||
|
if(player.isSubmergedInWater())
|
||||||
|
player.setAir(deauthenticatedUsers.get(convertUuid(player)).lastAir);
|
||||||
|
|
||||||
deauthenticatedUsers.remove(convertUuid(player));
|
deauthenticatedUsers.remove(convertUuid(player));
|
||||||
|
|
||||||
// Player no longer needs to be invisible and invulnerable
|
// Player no longer needs to be invisible and invulnerable
|
||||||
|
@ -194,6 +198,7 @@ public class SimpleAuth implements DedicatedServerModInitializer {
|
||||||
|
|
||||||
// Player is now not authenticated
|
// Player is now not authenticated
|
||||||
player.sendMessage(notAuthenticated(), false);
|
player.sendMessage(notAuthenticated(), false);
|
||||||
|
|
||||||
// Setting the player to be invisible to mobs and also invulnerable
|
// Setting the player to be invisible to mobs and also invulnerable
|
||||||
player.setInvulnerable(SimpleAuth.config.experimental.playerInvulnerable);
|
player.setInvulnerable(SimpleAuth.config.experimental.playerInvulnerable);
|
||||||
player.setInvisible(SimpleAuth.config.experimental.playerInvisible);
|
player.setInvisible(SimpleAuth.config.experimental.playerInvisible);
|
||||||
|
|
|
@ -70,20 +70,23 @@ public class AccountCommand {
|
||||||
);
|
);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AuthHelper.checkPass(convertUuid(player), pass.toCharArray()) == 1) {
|
// New thread to avoid lag spikes
|
||||||
SimpleAuth.db.deleteUserData(convertUuid(player));
|
new Thread(() -> {
|
||||||
player.sendMessage(
|
if (AuthHelper.checkPass(convertUuid(player), pass.toCharArray()) == 1) {
|
||||||
new LiteralText(config.lang.accountDeleted),
|
SimpleAuth.db.deleteUserData(convertUuid(player));
|
||||||
false
|
player.sendMessage(
|
||||||
);
|
new LiteralText(config.lang.accountDeleted),
|
||||||
SimpleAuth.deauthenticatePlayer(player);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
player.sendMessage(
|
|
||||||
new LiteralText(config.lang.wrongPassword),
|
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
SimpleAuth.deauthenticatePlayer(player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.sendMessage(
|
||||||
|
new LiteralText(config.lang.wrongPassword),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}).start();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,35 +102,38 @@ public class AccountCommand {
|
||||||
);
|
);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (AuthHelper.checkPass(convertUuid(player), oldPass.toCharArray()) == 1) {
|
// New thread to avoid lag spikes
|
||||||
if(newPass.length() < config.main.minPasswordChars) {
|
new Thread(() -> {
|
||||||
player.sendMessage(new LiteralText(
|
if (AuthHelper.checkPass(convertUuid(player), oldPass.toCharArray()) == 1) {
|
||||||
String.format(config.lang.minPasswordChars, config.main.minPasswordChars)
|
if (newPass.length() < config.main.minPasswordChars) {
|
||||||
), false);
|
player.sendMessage(new LiteralText(
|
||||||
return 0;
|
String.format(config.lang.minPasswordChars, config.main.minPasswordChars)
|
||||||
}
|
), false);
|
||||||
else if(newPass.length() > config.main.maxPasswordChars && config.main.maxPasswordChars != -1) {
|
return;
|
||||||
player.sendMessage(new LiteralText(
|
}
|
||||||
String.format(config.lang.maxPasswordChars, config.main.maxPasswordChars)
|
else if (newPass.length() > config.main.maxPasswordChars && config.main.maxPasswordChars != -1) {
|
||||||
), false);
|
player.sendMessage(new LiteralText(
|
||||||
return 0;
|
String.format(config.lang.maxPasswordChars, config.main.maxPasswordChars)
|
||||||
}
|
), false);
|
||||||
// JSON object holding password (may hold some other info in the future)
|
return;
|
||||||
JsonObject playerdata = new JsonObject();
|
}
|
||||||
String hash = AuthHelper.hashPass(newPass.toCharArray());
|
// JSON object holding password (may hold some other info in the future)
|
||||||
playerdata.addProperty("password", hash);
|
JsonObject playerdata = new JsonObject();
|
||||||
|
String hash = AuthHelper.hashPass(newPass.toCharArray());
|
||||||
|
playerdata.addProperty("password", hash);
|
||||||
|
|
||||||
SimpleAuth.db.updateUserData(convertUuid(player), playerdata.toString());
|
SimpleAuth.db.updateUserData(convertUuid(player), playerdata.toString());
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
new LiteralText(config.lang.passwordUpdated),
|
new LiteralText(config.lang.passwordUpdated),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
player.sendMessage(
|
||||||
|
new LiteralText(config.lang.wrongPassword),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
return 1;
|
}).start();
|
||||||
}
|
|
||||||
player.sendMessage(
|
|
||||||
new LiteralText(config.lang.wrongPassword),
|
|
||||||
false
|
|
||||||
);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,10 +114,13 @@ public class AuthCommand {
|
||||||
private static int setGlobalPassword(ServerCommandSource source, String pass) {
|
private static int setGlobalPassword(ServerCommandSource source, String pass) {
|
||||||
// Getting the player who send the command
|
// Getting the player who send the command
|
||||||
Entity sender = source.getEntity();
|
Entity sender = source.getEntity();
|
||||||
// Writing the global pass to config
|
// New thread to avoid lag spikes
|
||||||
config.main.globalPassword = AuthHelper.hashPass(pass.toCharArray());
|
new Thread(() -> {
|
||||||
config.main.enableGlobalPassword = true;
|
// Writing the global pass to config
|
||||||
config.save(new File("./mods/SimpleAuth/config.json"));
|
config.main.globalPassword = AuthHelper.hashPass(pass.toCharArray());
|
||||||
|
config.main.enableGlobalPassword = true;
|
||||||
|
config.save(new File("./mods/SimpleAuth/config.json"));
|
||||||
|
}).start();
|
||||||
|
|
||||||
if(sender != null)
|
if(sender != null)
|
||||||
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.globalPasswordSet), false);
|
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.globalPasswordSet), false);
|
||||||
|
@ -147,8 +150,10 @@ public class AuthCommand {
|
||||||
// Deleting (unregistering) user's account
|
// Deleting (unregistering) user's account
|
||||||
private static int removeAccount(ServerCommandSource source, String uuid) {
|
private static int removeAccount(ServerCommandSource source, String uuid) {
|
||||||
Entity sender = source.getEntity();
|
Entity sender = source.getEntity();
|
||||||
db.deleteUserData(uuid);
|
new Thread(() -> {
|
||||||
SimpleAuth.deauthenticatedUsers.put(uuid, new PlayerCache(uuid, null));
|
db.deleteUserData(uuid);
|
||||||
|
SimpleAuth.deauthenticatedUsers.put(uuid, new PlayerCache(uuid, null));
|
||||||
|
}).start();
|
||||||
|
|
||||||
if(sender != null)
|
if(sender != null)
|
||||||
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataDeleted), false);
|
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataDeleted), false);
|
||||||
|
@ -162,18 +167,19 @@ public class AuthCommand {
|
||||||
// Getting the player who send the command
|
// Getting the player who send the command
|
||||||
Entity sender = source.getEntity();
|
Entity sender = source.getEntity();
|
||||||
|
|
||||||
// JSON object holding password (may hold some other info in the future)
|
new Thread(() -> {
|
||||||
JsonObject playerdata = new JsonObject();
|
// JSON object holding password (may hold some other info in the future)
|
||||||
String hash = AuthHelper.hashPass(password.toCharArray());
|
JsonObject playerdata = new JsonObject();
|
||||||
playerdata.addProperty("password", hash);
|
String hash = AuthHelper.hashPass(password.toCharArray());
|
||||||
|
playerdata.addProperty("password", hash);
|
||||||
|
|
||||||
if(db.registerUser(uuid, playerdata.toString())) {
|
if (db.registerUser(uuid, playerdata.toString())) {
|
||||||
if(sender != null)
|
if (sender != null)
|
||||||
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataUpdated), false);
|
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataUpdated), false);
|
||||||
else
|
else
|
||||||
LOGGER.info(config.lang.userdataUpdated);
|
LOGGER.info(config.lang.userdataUpdated);
|
||||||
return 1;
|
}
|
||||||
}
|
}).start();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,17 +188,18 @@ public class AuthCommand {
|
||||||
// Getting the player who send the command
|
// Getting the player who send the command
|
||||||
Entity sender = source.getEntity();
|
Entity sender = source.getEntity();
|
||||||
|
|
||||||
// JSON object holding password (may hold some other info in the future)
|
new Thread(() -> {
|
||||||
JsonObject playerdata = new JsonObject();
|
// JSON object holding password (may hold some other info in the future)
|
||||||
String hash = AuthHelper.hashPass(password.toCharArray());
|
JsonObject playerdata = new JsonObject();
|
||||||
playerdata.addProperty("password", hash);
|
String hash = AuthHelper.hashPass(password.toCharArray());
|
||||||
|
playerdata.addProperty("password", hash);
|
||||||
|
|
||||||
db.updateUserData(uuid, playerdata.toString());
|
db.updateUserData(uuid, playerdata.toString());
|
||||||
if(sender != null)
|
if (sender != null)
|
||||||
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataUpdated), false);
|
((PlayerEntity) sender).sendMessage(new LiteralText(config.lang.userdataUpdated), false);
|
||||||
else
|
else
|
||||||
LOGGER.info(config.lang.userdataUpdated);
|
LOGGER.info(config.lang.userdataUpdated);
|
||||||
return 1;
|
}).start();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
// todo PlayerEntity.getOfflinePlayerUuid("")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,37 +33,38 @@ public class LoginCommand {
|
||||||
private static int login(ServerCommandSource source, String pass) throws CommandSyntaxException {
|
private static int login(ServerCommandSource source, String pass) throws CommandSyntaxException {
|
||||||
// Getting the player who send the command
|
// Getting the player who send the command
|
||||||
ServerPlayerEntity player = source.getPlayer();
|
ServerPlayerEntity player = source.getPlayer();
|
||||||
|
String uuid = convertUuid(player);
|
||||||
if(SimpleAuth.isAuthenticated(player)) {
|
if (SimpleAuth.isAuthenticated(player)) {
|
||||||
player.sendMessage(new LiteralText(config.lang.alreadyAuthenticated), false);
|
player.sendMessage(new LiteralText(config.lang.alreadyAuthenticated), false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
// Putting rest of the command in new thread to avoid lag spikes
|
||||||
|
new Thread(() -> {
|
||||||
|
int maxLoginTries = config.main.maxLoginTries;
|
||||||
|
int passwordResult = AuthHelper.checkPass(uuid, pass.toCharArray());
|
||||||
|
|
||||||
String uuid = convertUuid(player);
|
if(SimpleAuth.deauthenticatedUsers.get(uuid).loginTries >= maxLoginTries && maxLoginTries != -1) {
|
||||||
int passwordResult = AuthHelper.checkPass(uuid, pass.toCharArray());
|
player.networkHandler.disconnect(new LiteralText(config.lang.loginTriesExceeded));
|
||||||
int maxLoginTries = config.main.maxLoginTries;
|
return;
|
||||||
|
}
|
||||||
if(SimpleAuth.deauthenticatedUsers.get(uuid).loginTries >= maxLoginTries && maxLoginTries != -1) {
|
else if(passwordResult == 1) {
|
||||||
player.networkHandler.disconnect(new LiteralText(config.lang.loginTriesExceeded));
|
SimpleAuth.authenticatePlayer(player, new LiteralText(config.lang.successfullyAuthenticated));
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
else if(passwordResult == 1) {
|
else if(passwordResult == -1) {
|
||||||
SimpleAuth.authenticatePlayer(player, new LiteralText(config.lang.successfullyAuthenticated));
|
player.sendMessage(new LiteralText(config.lang.notRegistered), false);
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
else if(passwordResult == -1) {
|
// Kicking the player out
|
||||||
player.sendMessage(new LiteralText(config.lang.notRegistered), false);
|
else if(maxLoginTries == 1) {
|
||||||
return 0;
|
player.networkHandler.disconnect(new LiteralText(config.lang.wrongPassword));
|
||||||
}
|
return;
|
||||||
// Kicking the player out
|
}
|
||||||
else if(maxLoginTries == 1) {
|
// Sending wrong pass message
|
||||||
player.networkHandler.disconnect(new LiteralText(config.lang.wrongPassword));
|
player.sendMessage(new LiteralText(config.lang.wrongPassword), false);
|
||||||
return 0;
|
// ++ the login tries
|
||||||
}
|
SimpleAuth.deauthenticatedUsers.get(uuid).loginTries += 1;
|
||||||
// Sending wrong pass message
|
}).start();
|
||||||
player.sendMessage(new LiteralText(config.lang.wrongPassword), false);
|
|
||||||
// ++ the login tries
|
|
||||||
SimpleAuth.deauthenticatedUsers.get(uuid).loginTries += 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,18 +44,23 @@ public class RegisterCommand {
|
||||||
player.sendMessage(new LiteralText(config.lang.alreadyAuthenticated), false);
|
player.sendMessage(new LiteralText(config.lang.alreadyAuthenticated), false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if(pass1.equals(pass2)) {
|
else if(!pass1.equals(pass2)) {
|
||||||
|
player.sendMessage(new LiteralText(config.lang.matchPassword), false);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// New thread to avoid lag spikes
|
||||||
|
new Thread(() -> {
|
||||||
if(pass1.length() < config.main.minPasswordChars) {
|
if(pass1.length() < config.main.minPasswordChars) {
|
||||||
player.sendMessage(new LiteralText(
|
player.sendMessage(new LiteralText(
|
||||||
String.format(config.lang.minPasswordChars, config.main.minPasswordChars)
|
String.format(config.lang.minPasswordChars, config.main.minPasswordChars)
|
||||||
), false);
|
), false);
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
else if(pass1.length() > config.main.maxPasswordChars && config.main.maxPasswordChars != -1) {
|
else if(pass1.length() > config.main.maxPasswordChars && config.main.maxPasswordChars != -1) {
|
||||||
player.sendMessage(new LiteralText(
|
player.sendMessage(new LiteralText(
|
||||||
String.format(config.lang.maxPasswordChars, config.main.maxPasswordChars)
|
String.format(config.lang.maxPasswordChars, config.main.maxPasswordChars)
|
||||||
), false);
|
), false);
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
String hash = AuthHelper.hashPass(pass1.toCharArray());
|
String hash = AuthHelper.hashPass(pass1.toCharArray());
|
||||||
// JSON object holding password (may hold some other info in the future)
|
// JSON object holding password (may hold some other info in the future)
|
||||||
|
@ -64,12 +69,10 @@ public class RegisterCommand {
|
||||||
|
|
||||||
if (SimpleAuth.db.registerUser(convertUuid(player), playerdata.toString())) {
|
if (SimpleAuth.db.registerUser(convertUuid(player), playerdata.toString())) {
|
||||||
SimpleAuth.authenticatePlayer(player, new LiteralText(config.lang.registerSuccess));
|
SimpleAuth.authenticatePlayer(player, new LiteralText(config.lang.registerSuccess));
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
player.sendMessage(new LiteralText(config.lang.alreadyRegistered), false);
|
player.sendMessage(new LiteralText(config.lang.alreadyRegistered), false);
|
||||||
return 0;
|
}).start();
|
||||||
}
|
|
||||||
player.sendMessage(new LiteralText(config.lang.matchPassword), false);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ public class PlayerCache {
|
||||||
public String lastIp;
|
public String lastIp;
|
||||||
public long validUntil;
|
public long validUntil;
|
||||||
|
|
||||||
|
public int lastAir = 300;
|
||||||
|
|
||||||
public String lastDim;
|
public String lastDim;
|
||||||
public double lastX;
|
public double lastX;
|
||||||
public double lastY;
|
public double lastY;
|
||||||
|
@ -33,6 +35,8 @@ public class PlayerCache {
|
||||||
if(player != null) {
|
if(player != null) {
|
||||||
this.lastIp = player.getIp();
|
this.lastIp = player.getIp();
|
||||||
|
|
||||||
|
this.lastAir = player.getAir();
|
||||||
|
|
||||||
// Setting position cache
|
// Setting position cache
|
||||||
this.lastDim = String.valueOf(player.getEntityWorld().getDimension());
|
this.lastDim = String.valueOf(player.getEntityWorld().getDimension());
|
||||||
this.lastX = player.getX();
|
this.lastX = player.getX();
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class AuthHelper {
|
||||||
// Verify password
|
// Verify password
|
||||||
return argon2.verify(hashed, pass) ? 1 : 0;
|
return argon2.verify(hashed, pass) ? 1 : 0;
|
||||||
} catch (Error e) {
|
} catch (Error e) {
|
||||||
LOGGER.error("[SimpleAuth] error: " + e);
|
LOGGER.error("[SimpleAuth] Argon2 error: " + e);
|
||||||
return 0;
|
return 0;
|
||||||
} finally {
|
} finally {
|
||||||
// Wipe confidential data
|
// Wipe confidential data
|
||||||
|
|
Loading…
Reference in New Issue