Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / src / services / LoginService.java
LoginService.java
Raw
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;
        }
    }
}