SessionHandler.java 3.87 KB
/*

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fi.insomnia.bortal.handler;

import java.util.TimeZone;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

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

import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User;

/**
 * 
 * @author tuukka
 */
@Named()
@RequestScoped
public class SessionHandler {

	private static final Logger logger = LoggerFactory.getLogger(SessionHandler.class);

	@Inject
	private HttpServletRequest httprequest;

	@EJB
	private RoleBeanLocal rolebean;
	@EJB
	private EventBeanLocal eventbean;
	@EJB
	private PermissionBeanLocal permbean;

	public TimeZone getTimezone() {
		return TimeZone.getTimeZone("Europe/Helsinki");
	}

	public String getLocale() {
		// TODO: Locale selection code missing
		// return "en_ST_v7";
		return "en_ST_v7";
	}

	public String getLayout() {
		// TODO: layout selection code missing!!
		// return "stream1";
		return "insomnia2";
	}

	public boolean hasPermission(String target, String permission) {
		RolePermission perm = RolePermission.valueOf(permission.toUpperCase());
		// RolePermission perm = null;
		// if (permission.equalsIgnoreCase("read")) {
		// perm = RolePermission.READ;
		// } else if (permission.equals("write")) {
		// perm = RolePermission.WRITE;
		// } else if (permission.equals("execute")) {
		// perm = RolePermission.EXECUTE;
		// }else {
		// throw new RuntimeException("permission " + permission +
		// " does not match any")
		// }
		if (perm == null) {
			logger.warn("Permission {} does not have matching value in RolePermission enum!");
			throw new RuntimeException("Matching role permission could not be found!");
		}

		return hasPermission(target, perm);
	}

	//
	// private HttpSession getHttpSession() {
	// FacesContext ctx = FacesContext.getCurrentInstance();
	// HttpSession sess = (HttpSession)
	// ctx.getExternalContext().getSession(false);
	// return sess;
	// }

	// public boolean hasPermission(String perm) {
	// return permbean.hasPermission(perm);
	// }

	public boolean hasPermission(Permission target, RolePermission permission) {
		if (target == null || permission == null) {
			logger.warn("Target {} or permission {} is null", target, permission);
			throw new RuntimeException("Empty target or permission!");
		}
		boolean ret = permbean.hasPermission(target, permission);

		return ret;
	}

	public boolean hasPermission(String target, RolePermission permission) {

		return hasPermission(Permission.getPermission(target), permission);
	}

	public boolean canWrite(String target) {
		return hasPermission(target, RolePermission.WRITE);
	}

	public boolean canRead(String target) {
		return hasPermission(target, RolePermission.READ);
	}

	public boolean canExecute(String target) {
		return hasPermission(target, RolePermission.EXECUTE);
	}

	public String logout() {

		FacesContext ctx = FacesContext.getCurrentInstance();
		HttpSession sess = (HttpSession) ctx.getExternalContext().getSession(false);
		if (sess != null) {
			sess.invalidate();
		}

		return "logout";
	}

	public boolean isLoggedIn() {

		boolean ret = permbean.isLoggedIn();
		return ret;
	}

	public boolean isSuperadmin() {
		return permbean.getCurrentUser().isSuperadmin();

	}

	public User getCurrentUser() {
		return permbean.getCurrentUser();
	}

	public String flushCache() {
		return eventbean.flushCache();

	}

	public String fatalPermission(String target, String right) {
		return "FATALPERM!!: " + target + " " + right;
	}
}