75 lines
2.5 KiB
Java
75 lines
2.5 KiB
Java
package dev.service;
|
|
|
|
import dev.database.DatabaseConnection;
|
|
import dev.model.User;
|
|
|
|
import java.security.MessageDigest;
|
|
import java.sql.*;
|
|
import java.util.Base64;
|
|
|
|
public class AuthService {
|
|
|
|
private String hashPassword(String password) {
|
|
try {
|
|
MessageDigest digest = MessageDigest.getInstance("SHA-256");
|
|
byte[] hash = digest.digest(password.getBytes("UTF-8"));
|
|
return Base64.getEncoder().encodeToString(hash);
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("Hashing failed", e);
|
|
}
|
|
}
|
|
|
|
public boolean register(String username, String password, String email) {
|
|
|
|
if (username == null || username.trim().isEmpty() || password == null || password.isEmpty()) {
|
|
System.out.println("Username and password cannot be empty.");
|
|
return false;
|
|
}
|
|
|
|
String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
|
|
try (Connection conn = DatabaseConnection.getConnection();
|
|
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
|
|
|
pstmt.setString(1, username);
|
|
pstmt.setString(2, hashPassword(password));
|
|
if (email == null || email.trim().isEmpty()) {
|
|
pstmt.setNull(3, Types.VARCHAR);
|
|
} else {
|
|
pstmt.setString(3, email);
|
|
}
|
|
|
|
pstmt.executeUpdate();
|
|
return true;
|
|
} catch (SQLException e) {
|
|
System.out.println("Registration failed (Username might already exist): " + e.getMessage());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public User login(String username, String password) {
|
|
|
|
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
|
|
try (Connection conn = DatabaseConnection.getConnection();
|
|
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
|
|
|
pstmt.setString(1, username);
|
|
pstmt.setString(2, hashPassword(password));
|
|
|
|
try (ResultSet rs = pstmt.executeQuery()) {
|
|
if (rs.next()) {
|
|
return new User(
|
|
rs.getInt("id"),
|
|
rs.getString("username"),
|
|
rs.getString("password"),
|
|
rs.getString("email")
|
|
);
|
|
}
|
|
}
|
|
} catch (SQLException e) {
|
|
System.out.println("Login error: " + e.getMessage());
|
|
}
|
|
return null;
|
|
|
|
}
|
|
|
|
} |