oglimmer/lunchy

View on GitHub
src/main/java/de/oglimmer/lunchy/rest/SessionProvider.java

Summary

Maintainability
A
0 mins
Test Coverage
package de.oglimmer.lunchy.rest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.RandomStringUtils;

import de.oglimmer.lunchy.database.dao.UserDao;
import de.oglimmer.lunchy.database.generated.tables.records.UsersRecord;
import de.oglimmer.lunchy.rest.dto.LoginResponse;
import de.oglimmer.lunchy.services.DateCalcService;

public enum SessionProvider {
    INSTANCE;

    private static final String ATTR_NAME = "userId";

    public LoginResponse createSession(UsersRecord user, HttpSession session, boolean setToken) {
        LoginResponse loginResponse = new LoginResponse();
        fillResponse(loginResponse, user, setToken);
        createSession(user, session);
        user.setLastLogin(DateCalcService.getNow());
        UserDao.INSTANCE.store(user);
        return loginResponse;
    }

    private void createSession(UsersRecord user, HttpSession session) {
        session.setAttribute(ATTR_NAME, user.getId());
    }

    public void destroySession(HttpSession session) {
        if (session != null) {
            session.invalidate();
        }
    }

    public Integer getLoggedInUserId(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            return getLoggedInUserId(session);
        }
        return null;
    }

    public Integer getLoggedInUserId(HttpSession session) {
        if (session != null) {
            return (Integer) session.getAttribute(ATTR_NAME);
        }
        return null;
    }

    public UsersRecord getLoggedInUser(HttpServletRequest request, int fkCommunity) {
        return getLoggedInUser(request.getSession(false), fkCommunity);

    }

    public UsersRecord getLoggedInUser(HttpSession session, int fkCommunity) {
        Integer userId = getLoggedInUserId(session);
        if (userId != null) {
            return UserDao.INSTANCE.getById(userId, fkCommunity);
        }
        return null;
    }

    private void fillResponse(LoginResponse loginResponse, UsersRecord user, boolean setToken) {
        loginResponse.setSuccess(true);
        loginResponse.setFkOffice(user.getFkBaseOffice());
        loginResponse.setUserId(user.getId());
        loginResponse.setPermissions(user.getPermissions());
        if (setToken) {
            loginResponse.setLongTimeToken(user.getLongTimeToken());
        }
    }

    public void removeToken(UsersRecord user) {
        if (user != null && user.getLongTimeToken() != null) {
            user.setLongTimeToken(null);
            user.setLongTimeTimestamp(null);
            UserDao.INSTANCE.store(user);
        }
    }

    public void generateToken(UsersRecord user) {
        if (user.getLongTimeToken() == null) {
            user.setLongTimeTimestamp(DateCalcService.getNow());
            user.setLongTimeToken(RandomStringUtils.randomAlphanumeric(128));
        }
    }

}