Restaurant Database Management System
This commit is contained in:
@@ -1,23 +1,79 @@
|
||||
package dev.service;
|
||||
|
||||
import dev.dao.UserDao;
|
||||
import dev.model.User;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class AuthService {
|
||||
|
||||
private final UserDao userDao = new UserDao();
|
||||
|
||||
/**
|
||||
* Registers a new user. Checks the username is free and that the fields
|
||||
* are not empty, then stores the password as a SHA-256 hash.
|
||||
* Returns true only if the account was actually created.
|
||||
*/
|
||||
public boolean register(String username, String password, String email) {
|
||||
|
||||
// TODO:
|
||||
// Validate and register user
|
||||
if (username == null || username.isBlank()
|
||||
|| password == null || password.isBlank()) {
|
||||
System.out.println("Username and password are required.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
// Username must be unique.
|
||||
if (userDao.findByUsername(username) != null) {
|
||||
System.out.println("That username is already taken.");
|
||||
return false;
|
||||
}
|
||||
|
||||
User user = new User();
|
||||
user.setUsername(username);
|
||||
user.setPassword(hash(password)); // never store plain text
|
||||
user.setEmail(email == null || email.isBlank() ? null : email);
|
||||
|
||||
return userDao.save(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given credentials against the database.
|
||||
* Returns the User on success, or null if the username does not exist
|
||||
* or the password is wrong.
|
||||
*/
|
||||
public User login(String username, String password) {
|
||||
|
||||
// TODO:
|
||||
// Authenticate user
|
||||
User user = userDao.findByUsername(username);
|
||||
if (user == null) {
|
||||
return null; // no such username
|
||||
}
|
||||
|
||||
return null;
|
||||
// Hash the entered password and compare with the stored hash.
|
||||
if (user.getPassword().equals(hash(password))) {
|
||||
return user;
|
||||
}
|
||||
|
||||
return null; // wrong password
|
||||
}
|
||||
|
||||
}
|
||||
/** Hashes text with SHA-256 and returns it as a lowercase hex string. */
|
||||
private String hash(String text) {
|
||||
try {
|
||||
MessageDigest digest = MessageDigest.getInstance("SHA-256");
|
||||
byte[] bytes = digest.digest(text.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (byte b : bytes) {
|
||||
sb.append(String.format("%02x", b));
|
||||
}
|
||||
return sb.toString();
|
||||
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
// SHA-256 is always available, so this should never happen.
|
||||
throw new RuntimeException("SHA-256 not available", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user