package br.com.triadworks.issuetracker.controller;
import java.io.Serializable;
import java.net.URLDecoder;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.Specializes;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.conventionsframework.filter.ConventionsFilter;
import org.conventionsframework.qualifier.Config;
import org.conventionsframework.security.DefaultSecurityContext;
import org.conventionsframework.util.MessagesController;
import org.conventionsframework.util.ResourceBundle;
import br.com.triadworks.issuetracker.model.Usuario;
import br.com.triadworks.issuetracker.qualifier.UserRole;
import br.com.triadworks.issuetracker.qualifier.UsuarioLogado;
@SessionScoped
@Specializes
@Named("usuarioWeb")
public class UsuarioWeb extends DefaultSecurityContext implements Serializable{
private static final long serialVersionUID = 1L;
private Usuario usuario;
@Inject
@Config
transient Instance<ExternalContext> externalContext;
@Inject
@Config
transient Instance<FacesContext> facesContext;
@Inject
ResourceBundle bundle;
@Produces @UserRole
private String userRole;
private String pageRecovery;
public void loga(Usuario usuario) {
if(usuario.getLogin().equalsIgnoreCase("admin")){
userRole = "godlike";
}
else{
userRole = "";
}
this.usuario = usuario;
if (facesContext.get() != null) {
restorePageOnLogon();
MessagesController.addInfo(bundle.getString("logon.info.successful"));
}
}
private void restorePageOnLogon() {
ExternalContext ec = externalContext.get();
if (getPageRecovery() != null) {
try {
ec.redirect(ec.getRequestContextPath() + URLDecoder.decode(pageRecovery, "UTF-8"));
MessagesController.addWarn(bundle.getString("logon.info.successful"));
facesContext.get().responseComplete();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
setPageRecovery(null);
}
}
}
public void logout() {
this.usuario = null;
}
public void init() {
if (!facesContext.get().isPostback()) {
if (getPageRecovery() != null) {
MessagesController.addWarn(bundle.getString("expire.message"));
}
}
}
/**
* used by convention filter
* @see ConventionsFilter
*/
@Override
public Boolean loggedIn() {
return isLogado();
}
public boolean isLogado() {
return this.usuario != null;
}
@Produces
@UsuarioLogado
@Named("usuarioLogado")
public Usuario getUsuario() {
return usuario;
}
public String getPageRecovery() {
return pageRecovery;
}
public void setPageRecovery(String pageRecovery) {
this.pageRecovery = pageRecovery;
}
}