JaasBean.java 2.12 KB
package fi.insomnia.bortal.beans;

import java.util.Enumeration;
import java.util.Vector;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.enums.BeanRole;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;

/**
 * Session Bean implementation class SessionHandlerBean
 */
@Stateless
public class JaasBean implements JaasBeanLocal, JaasBeanRemote {

    private static final Logger logger = LoggerFactory.getLogger(JaasBean.class);
    @EJB
    private UserFacade userfacade;

    @EJB
    private SecurityBeanLocal secubean;

    @EJB
    private UserBean userbean;

    /**
     * Default constructor.
     */
    public JaasBean() {
        // TODO Auto-generated constructor stub
    }

    public User tryLogin(String username, String password) {

        User user = userfacade.findByLogin(username.trim());
        logger.debug("Trying to login as {}", username);
        User ret = null;
        if (user != null) {
            if (user.checkPassword(password)) {
                ret = user;
            } else {
                secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password! ");
            }
        } else {
            secubean.logMessage(SecurityLogType.permissionDenied, "Login failed: Username not found: " + username);

        }

        return ret;
    }

    @Override
    public boolean authenticate(String username, String password) {
        boolean ret = (tryLogin(username, password) != null);

        return ret;
    }

    @Override
    public Enumeration<String> getGroupNames(String user) {
        User usr = userbean.getUser(user);
        Vector<String> roles = new Vector<String>();

        if (usr != null) {
            for (Role r : usr.getRoles()) {
                roles.add(r.getName());
            }
            if (usr.isSuperadmin()) {
                roles.add(BeanRole.SUPERADMIN.name());
            }
        }

        logger.debug("group names for user {}: {}", user, roles);
        return roles.elements();
    }

}