Files
WS-10-Database/src/main/java/dev/service/AuthService.java
T

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;
}
}