refactor: use try-with-resources for login db operations

This commit is contained in:
P0nk
2021-04-04 14:59:19 +02:00
parent 8ddfe05dd6
commit b350fedc66

View File

@@ -21,26 +21,25 @@
*/ */
package net.server.handlers.login; package net.server.handlers.login;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.Calendar;
import client.DefaultDates; import client.DefaultDates;
import client.MapleClient;
import config.YamlConfig; import config.YamlConfig;
import net.MaplePacketHandler; import net.MaplePacketHandler;
import net.server.Server; import net.server.Server;
import net.server.coordinator.session.MapleSessionCoordinator;
import org.apache.mina.core.session.IoSession;
import tools.BCrypt; import tools.BCrypt;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.HexTool; import tools.HexTool;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleClient;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import net.server.coordinator.session.MapleSessionCoordinator; import java.sql.*;
import org.apache.mina.core.session.IoSession; import java.util.Calendar;
public final class LoginPasswordHandler implements MaplePacketHandler { public final class LoginPasswordHandler implements MaplePacketHandler {
@@ -51,7 +50,7 @@ public final class LoginPasswordHandler implements MaplePacketHandler {
private static String hashpwSHA512(String pwd) throws NoSuchAlgorithmException, UnsupportedEncodingException { private static String hashpwSHA512(String pwd) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest digester = MessageDigest.getInstance("SHA-512"); MessageDigest digester = MessageDigest.getInstance("SHA-512");
digester.update(pwd.getBytes("UTF-8"), 0, pwd.length()); digester.update(pwd.getBytes(StandardCharsets.UTF_8), 0, pwd.length());
return HexTool.toString(digester.digest()).replace(" ", "").toLowerCase(); return HexTool.toString(digester.digest()).replace(" ", "").toLowerCase();
} }
@@ -90,43 +89,37 @@ public final class LoginPasswordHandler implements MaplePacketHandler {
String nibbleHwid = HexTool.toCompressedString(hwidNibbles); String nibbleHwid = HexTool.toCompressedString(hwidNibbles);
int loginok = c.login(login, pwd, nibbleHwid); int loginok = c.login(login, pwd, nibbleHwid);
Connection con = null;
PreparedStatement ps = null;
if (YamlConfig.config.server.AUTOMATIC_REGISTER && loginok == 5) { if (YamlConfig.config.server.AUTOMATIC_REGISTER && loginok == 5) {
try { try (Connection con = DatabaseConnection.getConnection();
con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO accounts (name, password, birthday, tempban) VALUES (?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { //Jayd: Added birthday, tempban
ps = con.prepareStatement("INSERT INTO accounts (name, password, birthday, tempban) VALUES (?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS); //Jayd: Added birthday, tempban
ps.setString(1, login); ps.setString(1, login);
ps.setString(2, YamlConfig.config.server.BCRYPT_MIGRATION ? BCrypt.hashpw(pwd, BCrypt.gensalt(12)) : hashpwSHA512(pwd)); ps.setString(2, YamlConfig.config.server.BCRYPT_MIGRATION ? BCrypt.hashpw(pwd, BCrypt.gensalt(12)) : hashpwSHA512(pwd));
ps.setDate(3, Date.valueOf(DefaultDates.getBirthday())); ps.setDate(3, Date.valueOf(DefaultDates.getBirthday()));
ps.setTimestamp(4, Timestamp.valueOf(DefaultDates.getTempban())); ps.setTimestamp(4, Timestamp.valueOf(DefaultDates.getTempban()));
ps.executeUpdate(); ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys(); try (ResultSet rs = ps.getGeneratedKeys()) {
rs.next(); rs.next();
c.setAccID(rs.getInt(1)); c.setAccID(rs.getInt(1));
rs.close(); }
} catch (SQLException | NoSuchAlgorithmException | UnsupportedEncodingException e) { } catch (SQLException | NoSuchAlgorithmException | UnsupportedEncodingException e) {
c.setAccID(-1); c.setAccID(-1);
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
disposeSql(con, ps);
loginok = c.login(login, pwd, nibbleHwid); loginok = c.login(login, pwd, nibbleHwid);
} }
} }
if (YamlConfig.config.server.BCRYPT_MIGRATION && (loginok <= -10)) { // -10 means migration to bcrypt, -23 means TOS wasn't accepted if (YamlConfig.config.server.BCRYPT_MIGRATION && (loginok <= -10)) { // -10 means migration to bcrypt, -23 means TOS wasn't accepted
try { try (Connection con = DatabaseConnection.getConnection();
con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE accounts SET password = ? WHERE name = ?;")) {
ps = con.prepareStatement("UPDATE accounts SET password = ? WHERE name = ?;");
ps.setString(1, BCrypt.hashpw(pwd, BCrypt.gensalt(12))); ps.setString(1, BCrypt.hashpw(pwd, BCrypt.gensalt(12)));
ps.setString(2, login); ps.setString(2, login);
ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
disposeSql(con, ps);
loginok = (loginok == -10) ? 0 : 23; loginok = (loginok == -10) ? 0 : 23;
} }
} }
@@ -157,22 +150,8 @@ public final class LoginPasswordHandler implements MaplePacketHandler {
} }
} }
private static void login(MapleClient c){ private static void login(MapleClient c) {
c.announce(MaplePacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()? c.announce(MaplePacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()?
Server.getInstance().registerLoginState(c); Server.getInstance().registerLoginState(c);
} }
private static void disposeSql(Connection con, PreparedStatement ps) {
try {
if (con != null) {
con.close();
}
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
} }