RecuperarSenhaBean.java 6.42 KB
package br.gov.mc.cadsei.bean;

import java.text.Normalizer;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import br.gov.arquitetura.bean.BaseBean;
import br.gov.mc.arquitetura.util.GeradorSenha;
import br.gov.mc.cadsei.entidade.CadProponente;
import br.gov.mc.cadsei.service.GenericService;
import br.gov.mc.cadsei.service.ProponenteService;
import br.gov.mc.cadsei.util.Constantes;
import br.gov.mc.cadsei.util.CpfCnpjUtil;
import br.gov.mc.cadsei.util.CriptoUtil;
import br.gov.mc.cadsei.util.EnvioMail;
import br.gov.mc.corporativo.entidade.CrpPessoaFisica;
import br.gov.mc.corporativo.entidade.CrpTipoPessoa;

@ManagedBean(name = "recuperarSenhaBean")
@ViewScoped
public class RecuperarSenhaBean extends BaseBean<CadProponente> {

	private static final long serialVersionUID = 1L;
	
	@ManagedProperty(value = "#{genericService}")
	private transient GenericService genericService;
	
	@ManagedProperty(value = "#{proponenteService}")
	private transient ProponenteService proponenteService;
	
	private String cpfProponente;
	private String email;
	private Date dataNascimento;
	private boolean captchaValido;
	private String ipUsuario;

	public String getCpfProponente() {
		return cpfProponente;
	}

	public void setCpfProponente(String cpfProponente) {
		this.cpfProponente = cpfProponente;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public boolean isCaptchaValido() {
		return captchaValido;
	}

	public void setCaptchaValido(boolean captchaValido) {
		this.captchaValido = captchaValido;
	}
	public String getIpUsuario() {
		return ipUsuario;
	}

	public void setIpUsuario(String ipUsuario) {
		this.ipUsuario = ipUsuario;
	}

	public void buscaIp(){
		if(this.getIpUsuario() == null || this.getIpUsuario().isEmpty()){
			ExternalContext curContext = FacesContext.getCurrentInstance().getExternalContext();
			HttpServletRequest request = (HttpServletRequest)curContext.getRequest();
			this.setIpUsuario(request.getRemoteAddr());
		}
	}	
	
	/**
	 * Retira acentos do texto informado
	 * @param Texto a ser ajustado
	 * @return Texto ajustado
	 */
	private String normalize(String input){
		return Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "").trim();
	}	
	
	public String recuperar() throws Exception {
		if (validaEnvio()){
			CadProponente p = proponenteService.recuperarSenha(this.getEmail(), this.getDataNascimento(), cpfProponente.replace("-", "").replace("/", "").replace(".", ""));
			if (p!=null){
				try{
					//Criando nova senha com criptografia
					CadProponente prop = p;
					String senhaUsuario = GeradorSenha.gerarSenha();
					prop.setSenhaProponente(CriptoUtil.getCriptografia(senhaUsuario));
					this.getProponenteService().atualizaSenhaProponente(prop);
					prop.setSenha(senhaUsuario);

					String descEmail = "sua senha foi recuperada com sucesso!";
					EnvioMail.sendEmail(p, descEmail);
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"", "As informa&ccedil;&otilde;es foram enviadas para o e-mail cadastrado"));
					this.clearForm();
				}catch (Exception e) {
					e.printStackTrace();
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"", "N&atilde;o foi poss&iacute;vel gerar nova senha para o usu&aacute;rio."));
				}
			} else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"", "Usu&aacute;rio n&atilde;o foi cadastrado ou houve uma falha na recupera&ccedil;&atilde;o da sua senha"));
			}
			
		}
		return "";
	}
	
	private void clearForm(){
		this.setCpfProponente(null);
		this.setEmail(null);
		this.setCaptchaValido(false);
		this.setDataNascimento(null);
	}
	
	@SuppressWarnings("unchecked")
	public String validarCaptcha() {
		buscaIp();
		if (Constantes.USAR_CAPTCHA) {
			if (getSessionMap().get("captchaValido") != null) {
				captchaValido = (Boolean) getSessionMap().get("captchaValido");
			}
			if (captchaValido) {
				getSessionMap().put("captchaValido", captchaValido);
				return redirect("principal.jsf");
			} else {
				return redirect("login_externo.jsf");
			}

		} else {
			captchaValido = true;
			return "";
		}
	}
	
	@Override
	public CadProponente createModel() {
		CadProponente proponente = new CadProponente();
		CrpPessoaFisica crpf = new CrpPessoaFisica();
		crpf.setTipoPessoa(new CrpTipoPessoa(CrpTipoPessoa.FISICA));
		proponente.setPessoaProponente(crpf);
		return proponente;
	}

	@Override
	public String getQualifiedName() {
		return "Proponente";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}
	
	@Override
	public String getRequiredMessage() {
		return super.getRequiredMessage();
	}
	
	public boolean validaEnvio() throws Exception {
		if(cpfProponente == ""){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Campo CPF Obrigat&oacute;rio"));
			return false;
		}
		if(this.email == ""){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Campo E-mail Obrigat&oacute;rio"));
			return false;
		}
//		if(this.dataNascimento == null){
//			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Campo Data Nascimento Obrigat&oacute;rio"));
//			return false;
//		}
		
		if(!(CpfCnpjUtil.ValidateCPF(cpfProponente))){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"", "CPF Inv&aacute;lido"));
			return false;
		}
		
		return true;
	}

	public GenericService getGenericService() {
		return genericService;
	}

	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public ProponenteService getProponenteService() {
	    return proponenteService;
	}

	public void setProponenteService(ProponenteService proponenteService) {
	    this.proponenteService = proponenteService;
	}
	
}