package services; import dao.AuthTokenDAO; import dao.DataAccessException; import dao.Database; import dao.UserDAO; import model.AuthToken; import model.User; import request.LoginRequest; import result.LoginResult; import result.RegisterResult; import java.util.UUID; /** * Implementation of the /user/login API route */ public class LoginService { /** * Logs in the user and returns an auth token * @param r - the loginRequest * @return the result of the login operation */ public LoginResult login(LoginRequest r) throws DataAccessException { Database db = new Database(); LoginResult result = new LoginResult(); String authToken = UUID.randomUUID().toString(); AuthToken token = new AuthToken(r.getUsername(), authToken); try { db.openConnection(); UserDAO uDao = new UserDAO(db.getConnection()); if (uDao.validate(r.getUsername(), r.getPassword())) { new AuthTokenDAO(db.getConnection()).createAuthToken(token); User user = new UserDAO(db.getConnection()).getUserByID(r.getUsername()); db.closeConnection(true); result.setAuthToken(authToken); result.setUsername(r.getUsername()); result.setPersonID(user.getPersonID()); result.setSuccess(true); return result; } else { throw new DataAccessException("Couldn't find user in database"); } } catch (Exception e) { e.printStackTrace(); db.closeConnection(false); result.setMessage("Error: " + e.getMessage()); result.setSuccess(false); return result; } } }