JaasBean.java 3.31 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.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent;
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;
	@EJB
	private EventBeanLocal eventbean;

	public User tryLogin(String username, String password) {

		User user = userfacade.findByLogin(username.trim());
		User ret = null;
		if (user != null) {
			if (user.isAnonymous()) {
				logger.info("logging in as anonymous!!!");
				ret = user;
			} else 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) {
		logger.warn("Trying to login as {}", username);
		boolean ret = (tryLogin(username, password) != null);

		return ret;
	}

	@Override
	public Enumeration<String> getGroupNames(String user) {
		logger.info("Fetching groupNames for user {}", user);
		User usr = userbean.getUser(user);
		HashSet<String> roleset = new HashSet<String>();
		roleset.add(UserPermission.ANYUSER.getFullName());

		if (usr == null) {
			usr = permbean.getAnonUser();
			roleset.add(SpecialPermission.ANONYMOUS.name());
		}

		if (usr != null && !usr.isAnonymous()) {
			roleset.add(SpecialPermission.USER.name());
		}
		// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
		if (usr != null && usr.isSuperadmin()) {
			for (BortalApplication app : BortalApplication.values()) {
				for (IAppPermission perm : app.getPermissions()) {
					roleset.add(perm.getFullName());
				}
			}
			roleset.add(SpecialPermission.SUPERADMIN.name());
		} else {

			List<Role> usrroles = userbean.localFindUsersRoles(usr);
			for (Role role : usrroles) {
				for (ApplicationPermission apperm : role.getPermissions()) {
					roleset.add(apperm.getPermission().getFullName());
				}
			}
			LanEvent event = eventbean.getCurrentEvent();

			if (event != null && !usr.isAnonymous() && event.getDefaultRole() != null) {
				for (ApplicationPermission apperm : event.getDefaultRole().getPermissions()) {
					roleset.add(apperm.getPermission().getFullName());
				}
			}
		}

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

		return retvect.elements();
	}
}