package services.login; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import utils.PasswordEncryption; import database.odb.ObjectDatabase; import main.Core; public class LocalDbLoginProvider implements ILoginProvider { private ObjectDatabase accountODB; public LocalDbLoginProvider(ObjectDatabase accountODB) { this.accountODB = accountODB; } @Override public long getAccountId(String username, String password, String remoteAddress) { Core core = Core.getInstance(); boolean autoReg = core.loginService.isAutoRegistration(); Account account = (Account) accountODB.get(username); String hash; try { hash = PasswordEncryption.generatePasswordHash(password); } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); return -3; } if(account == null && !autoReg) { return -2; } else if(account != null) { if(account.isBanned()) return -4; boolean passMatch = false; try { passMatch = PasswordEncryption.validatePassword(password, account.getPasswordHash()); } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); return -3; } return passMatch ? 0 : -3; } else { account = new Account(core.loginService.generateAccountId(), username, hash); accountODB.put(username, account); } return account.getId(); } }