From 1083665fac5b5bb6551c8f505fd9ff8ba1921f9b Mon Sep 17 00:00:00 2001 From: samo_lego <34912839+samolego@users.noreply.github.com> Date: Sat, 11 Apr 2020 19:27:49 +0200 Subject: [PATCH] Checking if user is registered, finalising leveldb. --- .../simpleauth/commands/ChangepwCommand.java | 2 +- .../simpleauth/commands/LoginCommand.java | 13 ++++++------ .../commands/UnregisterCommand.java | 2 +- .../database/SimpleAuthDatabase.java | 21 +++++++++++++------ .../simpleauth/utils/AuthConfig.java | 1 + .../simpleauth/utils/AuthHelper.java | 14 ++++++++----- 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/samo_lego/simpleauth/commands/ChangepwCommand.java b/src/main/java/org/samo_lego/simpleauth/commands/ChangepwCommand.java index 73b5c39..e401266 100644 --- a/src/main/java/org/samo_lego/simpleauth/commands/ChangepwCommand.java +++ b/src/main/java/org/samo_lego/simpleauth/commands/ChangepwCommand.java @@ -54,7 +54,7 @@ public class ChangepwCommand { player.sendMessage(cannotChangePassword); return 0; } - else if (AuthHelper.checkPass(player.getUuidAsString(), oldPass.toCharArray())) { + else if (AuthHelper.checkPass(player.getUuidAsString(), oldPass.toCharArray()) == 1) { SimpleAuth.db.update( player.getUuidAsString(), AuthHelper.hashPass(newPass.toCharArray()) diff --git a/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java b/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java index cf269f9..ed8b032 100644 --- a/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java +++ b/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java @@ -18,6 +18,7 @@ public class LoginCommand { private static Text enterPassword = new LiteralText(SimpleAuth.config.lang.enterPassword); private static Text wrongPassword = new LiteralText(SimpleAuth.config.lang.wrongPassword); private static Text alreadyAuthenticated = new LiteralText(SimpleAuth.config.lang.alreadyAuthenticated); + private static Text notRegistered = new LiteralText(SimpleAuth.config.lang.notRegistered); private static Text loginTriesExceeded = new LiteralText(SimpleAuth.config.lang.loginTriesExceeded); private static Text successfullyAuthenticated = new LiteralText(SimpleAuth.config.lang.successfullyAuthenticated); private static int maxLoginTries = SimpleAuth.config.main.maxLoginTries; @@ -48,16 +49,14 @@ public class LoginCommand { player.networkHandler.disconnect(loginTriesExceeded); return 0; } - else if(SimpleAuth.config.main.enableGlobalPassword) { - if (AuthHelper.checkPass(null, pass.toCharArray())) { - SimpleAuth.authenticatePlayer(player, successfullyAuthenticated); - return 1; - } - } - else if (AuthHelper.checkPass(player.getUuidAsString(), pass.toCharArray())) { + else if (AuthHelper.checkPass(player.getUuidAsString(), pass.toCharArray()) == 1) { SimpleAuth.authenticatePlayer(player, successfullyAuthenticated); return 1; } + else if(AuthHelper.checkPass(player.getUuidAsString(), pass.toCharArray()) == -1) { + player.sendMessage(notRegistered); + return 0; + } // Kicking the player out else if(maxLoginTries == 1) { SimpleAuth.deauthenticatePlayer(player); diff --git a/src/main/java/org/samo_lego/simpleauth/commands/UnregisterCommand.java b/src/main/java/org/samo_lego/simpleauth/commands/UnregisterCommand.java index f7e74d0..ed7984a 100644 --- a/src/main/java/org/samo_lego/simpleauth/commands/UnregisterCommand.java +++ b/src/main/java/org/samo_lego/simpleauth/commands/UnregisterCommand.java @@ -45,7 +45,7 @@ public class UnregisterCommand { player.sendMessage(cannotUnregister); return 0; } - else if (AuthHelper.checkPass(player.getUuidAsString(), pass.toCharArray())) { + else if (AuthHelper.checkPass(player.getUuidAsString(), pass.toCharArray()) == 1) { SimpleAuth.db.delete(player.getUuidAsString()); player.sendMessage(accountDeleted); return 1; diff --git a/src/main/java/org/samo_lego/simpleauth/database/SimpleAuthDatabase.java b/src/main/java/org/samo_lego/simpleauth/database/SimpleAuthDatabase.java index 5c9ee3c..e03146f 100644 --- a/src/main/java/org/samo_lego/simpleauth/database/SimpleAuthDatabase.java +++ b/src/main/java/org/samo_lego/simpleauth/database/SimpleAuthDatabase.java @@ -3,6 +3,7 @@ package org.samo_lego.simpleauth.database; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.iq80.leveldb.DB; +import org.iq80.leveldb.DBException; import org.iq80.leveldb.Options; import org.samo_lego.simpleauth.SimpleAuth; @@ -41,9 +42,8 @@ public class SimpleAuthDatabase { // When player registers, we insert the data into DB public boolean registerUser(String uuid, String password) { - System.out.println(Arrays.toString(levelDBStore.get(bytes("UUID:" + uuid)))); try { - if(levelDBStore.get(bytes("UUID:" + uuid)) == null) { + if(!this.isRegistered(uuid)) { levelDBStore.put(bytes("UUID:" + uuid), bytes("password:" + password)); return true; } @@ -54,6 +54,16 @@ public class SimpleAuthDatabase { } } + // Checks if user is registered + private boolean isRegistered(String uuid) { + try { + return levelDBStore.get(bytes("UUID:" + uuid)) != null; + } catch (DBException e) { + LOGGER.error("[SimpleAuth] " + e.getMessage()); + } + return false; + } + // Deletes row containing the username provided public void delete(String uuid) { try { @@ -74,13 +84,12 @@ public class SimpleAuthDatabase { // Gets the hashed password from DB public String getPassword(String uuid){ - String password = null; try { - // Gets password from db and removes "password:" prefix from it - password = new String(levelDBStore.get(bytes("UUID:" + uuid))).substring(9); + if(this.isRegistered(uuid)) // Gets password from db and removes "password:" prefix from it + return new String(levelDBStore.get(bytes("UUID:" + uuid))).substring(9); } catch (Error e) { LOGGER.error("[SimpleAuth] Error getting password: " + e.getMessage()); } - return password; + return ""; } } \ No newline at end of file diff --git a/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java b/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java index 5dd5dc6..5d12846 100644 --- a/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java +++ b/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java @@ -90,6 +90,7 @@ public class AuthConfig { public String accountDeleted = "§aYour account was successfully deleted!"; public String configurationReloaded = "§aConfiguration file was reloaded successfully."; public String successfulPortalRescue = "§aYou were rescued from nether portal successfully!"; + public String notRegistered = "§6This account is not yet registered! Type `/register` first"; } private static final Logger LOGGER = LogManager.getLogger(); private static final Gson gson = new GsonBuilder() diff --git a/src/main/java/org/samo_lego/simpleauth/utils/AuthHelper.java b/src/main/java/org/samo_lego/simpleauth/utils/AuthHelper.java index bd8dcc1..45cbf2e 100644 --- a/src/main/java/org/samo_lego/simpleauth/utils/AuthHelper.java +++ b/src/main/java/org/samo_lego/simpleauth/utils/AuthHelper.java @@ -12,15 +12,17 @@ public class AuthHelper { // Creating the instance private static Argon2 argon2 = Argon2Factory.create(); - public static boolean checkPass(String uuid, char[] pass) { + // Returns 1 if password is correct, 0 if not + // and -1 if user is not registered yet + public static int checkPass(String uuid, char[] pass) { if(SimpleAuth.config.main.enableGlobalPassword) { // We have global password enabled try { - return argon2.verify(SimpleAuth.config.main.globalPassword, pass); + return argon2.verify(SimpleAuth.config.main.globalPassword, pass) ? 1 : 0; } catch (Error e) { LOGGER.error("[SimpleAuth] Argon2 error: " + e); - return false; + return 0; } finally { // Wipe confidential data argon2.wipeArray(pass); @@ -30,11 +32,13 @@ public class AuthHelper { try { // Hashed password from DB String hashed = SimpleAuth.db.getPassword(uuid); + if(hashed.equals("")) + return -1; // User is not yet registered // Verify password - return argon2.verify(hashed, pass); + return argon2.verify(hashed, pass) ? 1 : 0; } catch (Error e) { LOGGER.error("[SimpleAuth] error: " + e); - return false; + return 0; } finally { // Wipe confidential data argon2.wipeArray(pass);