package dao;
import db.DatabaseConnection;
import model.User;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.*;
public class UserDAO {
// Хеширование пароля (SHA-256)
public static String hashPassword(String password) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(password.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : hash) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
// Регистрация
public boolean register(String username, String email, String password) {
String sql = "INSERT INTO users (username, email, password_hash) VALUES (?, ?, ?)";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, email);
stmt.setString(3, hashPassword(password));
return stmt.executeUpdate() > 0;
} catch (SQLException e) {
System.err.println("Ошибка регистрации: " + e.getMessage());
return false;
}
}
// Проверка существования пользователя
public boolean userExists(String username, String email) {
String sql = "SELECT 1 FROM users WHERE username = ? OR email = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, email);
try (ResultSet rs = stmt.executeQuery()) {
return rs.next();
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// Авторизация
public User login(String username, String password) {
String sql = "SELECT id, username, email, password_hash FROM users WHERE username = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String storedHash = rs.getString("password_hash");
if (storedHash.equals(hashPassword(password))) {
return new User(
rs.getInt("id"),
rs.getString("username"),
rs.getString("email"),
storedHash
);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}