/* * This file is part of SGEA - Sistema de Gestão de Eventos Acadêmicos - TADS IFNMG Campus Januária. * * SGEA is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SGEA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SGEA. If not, see <http://www.gnu.org/licenses/>. */ package br.edu.ifnmg.GerenciamentoEventos.Apresentacao; import br.edu.ifnmg.DomainModel.AreaConhecimento; import br.edu.ifnmg.DomainModel.Perfil; import br.edu.ifnmg.GerenciamentoEventos.Aplicacao.ControllerBase; import br.edu.ifnmg.GerenciamentoEventos.Aplicacao.ValidadorCPF; import br.edu.ifnmg.DomainModel.Pessoa; import br.edu.ifnmg.DomainModel.Services.AutorizacaoService; import br.edu.ifnmg.DomainModel.Services.HashService; import br.edu.ifnmg.DomainModel.Services.PerfilRepositorio; import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.PessoaRepositorioLocal; import java.io.IOException; import javax.inject.Named; import java.io.Serializable; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.enterprise.context.SessionScoped; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.ValidatorException; import javax.inject.Inject; /** * * @author petronio */ @Named(value = "autenticacaoController") @SessionScoped public class AutenticacaoController extends ControllerBase implements Serializable { /** * Creates a new instance of AutenticacaoController */ public AutenticacaoController() { } @EJB PessoaRepositorioLocal dao; @EJB HashService hash; @EJB PerfilRepositorio perfilDAO; @Inject AutorizacaoService autorizacao; AreaConhecimento areaConhecimento; private String login, senha, senhaconferencia; Pessoa usuario; public void validar() { if (autenticacao.login(login, senha)) { AppendLog("Login"); Redirect(autenticacao.getUsuarioCorrente().getPerfil().getHome().getUri()); } else { MensagemErro("Falha", "Login ou senha não correspondem"); } } public void logout() throws IOException { AppendLog("Logout"); setUsuario(null); autenticacao.logout(); FacesContext.getCurrentInstance().getExternalContext() .invalidateSession(); FacesContext.getCurrentInstance().getExternalContext() .redirect("../login.xhtml"); } public String novo() { setUsuario(null); return "cadastrar.xhtml"; } public void cadastrar() { getUsuario().setPerfil(perfilDAO.getPadrao()); usuario.setSenha(java.util.UUID.randomUUID().toString()); if (dao.Salvar(usuario)) { autenticacao.redefinirSenha(usuario.getEmail()); AppendLog("Cadastro do usuário " + usuario.getEmail()); } else { AppendLog("Erro ao cadastrar usuário: " + dao.getErro().toString()); } } public void cadastrarAvaliador() { if(getSessao("usuarioAutenticado", dao) == null){ try { FacesContext.getCurrentInstance().getExternalContext() .redirect("../login.xhtml"); } catch (IOException ex) { Logger.getLogger(AutenticacaoController.class.getName()).log(Level.SEVERE, null, ex); } return; } if(getUsuario().getAreasConhecimento().isEmpty()){ MensagemErro("Falha!", "Você precisa cadastrar pelo menos uma área de conhecimento!"); return; } Perfil avaliador = perfilDAO.Abrir( Long.parseLong( getConfiguracao("PERFILSELECAOAVALIADOR") ) ); getUsuario().setPerfil(avaliador); if (dao.Salvar(usuario)) { AppendLog("Cadastro do usuário " + usuario.getEmail() + "como avaliador"); Mensagem("Sucesso!","O seu cadastro será submetido a uma avaliação de perfil. Em breve entraremos em contato!"); } else { AppendLog("Erro ao cadastrar usuário: " + dao.getErro().toString()); MensagemErro("Falha!","Erro ao cadastrar usuário! Entre em contato com o administrador."); } } public void salvar() { if (senha != null && !senha.isEmpty()) { if (senha.equals(senhaconferencia)) { getUsuario().setSenha(hash.getMD5(senha)); } else { MensagemErro("Senhas", "Senhas não conferem!"); return; } } if (dao.Salvar(usuario)) { AppendLog("Cadastro do usuário " + usuario.getEmail()); } else { AppendLog("Erro ao cadastrar usuário: " + dao.getErro().toString()); } } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } public String getSenhaconferencia() { return senhaconferencia; } public void setSenhaconferencia(String senhaconferencia) { this.senhaconferencia = senhaconferencia; } public Pessoa getUsuario() { if (usuario == null) { usuario = (Pessoa) getSessao("usuarioAutenticado", dao); if (usuario == null) { usuario = new Pessoa(); } } return usuario; } public void setUsuario(Pessoa usuario) { this.usuario = usuario; setSessao("usuarioAutenticado", usuario); } public boolean autorizacao(String url) { return autorizacao.possuiPermissao(url); } public void novasenha() { if (autenticacao.redefinirSenha(login)) { Mensagem("Sucesso!", "Em alguns minutos será enviada uma nova senha para o e-mail informado! "); } else { MensagemErro("Falha!", "Houve um problema ao enviar o e-mail com a nova senha! " + "Consulte o administrador do sistema ou tente novamente em alguns instantes."); } } public void idleListener() { autenticacao.logout(); } public void validaCPF(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (getUsuarioCorrente() != null) { return; } Pessoa tmp = dao.AbrirPorCPF(value.toString()); if (tmp != null) { FacesMessage msg = new FacesMessage("CPF já cadastrado!"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } if (!ValidadorCPF.validaCPF(value.toString())) { FacesMessage msg = new FacesMessage("CPF Inválido!"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } public void validaEmail(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (getUsuarioCorrente() != null) { return; } Pessoa tmp = dao.Abrir(value.toString()); if (tmp != null) { FacesMessage msg = new FacesMessage("E-mail já cadastrado!"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } public AreaConhecimento getAreaConhecimento() { return areaConhecimento; } public void setAreaConhecimento(AreaConhecimento areaConhecimento) { this.areaConhecimento = areaConhecimento; } public void addAreaConhecimento() { if(getUsuario().getAreasConhecimento().size() <= 3) { getUsuario().add(areaConhecimento); dao.Salvar(usuario); areaConhecimento = null; } else { Mensagem("Atenção!", "Devem ser cadastradas no máximo 3 áreas de conhecimento! "); } } public void removeAreaConhecimento() { getUsuario().remove(areaConhecimento); dao.Salvar(usuario); areaConhecimento = null; } }