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

import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
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.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
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 LoggingBeanLocal secubean;

	@EJB
	private UserBean userbean;
	@EJB
	private PermissionBeanLocal permbean;

	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 for username ", username);
			}
		} else {
			secubean.logMessage(SecurityLogType.permissionDenied, null, "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);
		HashSet<String> roleset = new HashSet<String>();
		if (usr != null) {

			if (permbean.isLoggedIn()) {
				roleset.add("USER");
			}
			// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
			if (usr.isSuperadmin()) {
				for (BortalApplication app : BortalApplication.values()) {
					for (IAppPermission perm : app.getPermissions()) {
						roleset.add(perm.getFullName());
					}
				}
				roleset.add(BeanRole.SUPERADMIN.name());
			} else {
				List<Role> usrroles = userbean.localFindUsersRoles(usr);
				for (Role role : usrroles) {
					for (ApplicationPermission apperm : role.getPermissions()) {
						roleset.add(apperm.getPermission().getFullName());
					}
				}

			}
		}
		Vector<String> retvect = new Vector<String>();
		retvect.addAll(roleset);
		logger.debug("group names for user {}: {}", user, retvect);

		return retvect.elements();
	}
}