Package br.gov.serpro.ouvidoria.controller

Source Code of br.gov.serpro.ouvidoria.controller.LoginCtrl

/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.controller;

import java.sql.Timestamp;
import java.util.Iterator;
import java.util.List;

import br.gov.serpro.ouvidoria.dao.Dao;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.model.ParametrosGerais;
import br.gov.serpro.ouvidoria.model.Perfil;

/**
* LoginCtrl
*
* Objetivo: Controlar as operações sobre os objetos relacionados à
* funcionalidade Login.
*
* @author SERPRO
* @version $Revision: 1.1.2.3 $, $Date: 2011/10/19 18:18:10 $
* @version 0.1, Date: 2004/12/13
*/
public class LoginCtrl {

  private Dao parametrosDao;

  private Dao funcionarioDao;

  private int validaSenha = 3;

  /**
   * Construtor recebendo objeto Dao
   *
   * @param daoFactory
   */
  public LoginCtrl(final DaoFactory daoFactory) {
    parametrosDao = daoFactory.create(ParametrosGerais.class);
    funcionarioDao = daoFactory.create(Funcionario.class);
  }

  /**
   * Verifica se o Funcionário existe para um determinado Órgão, recebendo seu
   * Login e sua senha válida também
   *
   * @param orgao
   * @param login
   * @param senha
   * @return Funcionario se ele existir, null caso contrário
   * @throws DaoException
   */
  public Funcionario validaFuncionario(final Orgao orgao, final String login,
      final String senha) throws DaoException {

    Timestamp agora = new Timestamp(System.currentTimeMillis());

    if (orgao == null) {
      throw new NullPointerException();
    }

    if (login == null || login.trim().length() == 0) {
      return null;
    }

    if (senha == null || senha.trim().length() == 0) {
      return null;
    }

    StringBuffer hql = new StringBuffer();
    hql.append("from Funcionario as f \n");
    hql.append("  inner join fetch f.perfil \n");
    hql.append("  inner join fetch f.instituicao \n");
    hql.append("where f.login = '" + login.replaceAll("'", "") + "' \n");
    hql.append("  and f.situacao = '" + Funcionario.ATIVO + "' \n");
    hql.append("  and ( f.perfil.id = " + Perfil.ADMINISTRADOR.getId()
        + " \n");
    hql.append("        or f.instituicao.id = " + orgao.getId() + " ) \n");

    String sql = hql.toString();
    List funcionarios = funcionarioDao.query(sql);

    if (funcionarios == null || funcionarios.isEmpty()) {
      return null;
    }

    Funcionario funcionario = null;
    for (Iterator iter = funcionarios.iterator(); iter.hasNext();) {
      Funcionario temp = (Funcionario) iter.next();

      if (temp.checarLoginBloqueado()) {
        validaSenha = 1;
        continue;
      }

      if (senha.equals(temp.getSenha())) {

        if (temp.getDataBloqueioLogin() != null
            && temp.getDataBloqueioLogin().after(agora)) {
          validaSenha = 1; // Mensagem de login bloqueado
        } else {
          temp.desbloquearLogin();
          funcionario = temp;
          funcionarioDao.save(temp);
          break;
        }

      } else {

        if (!orgao.equals(temp.getInstituicao())) {
          validaSenha = 3;
          continue;
        }

        // Valida tentativas de acesso
        Integer tempoBloqueio = null;
        int numeroTentativas = 0;
        int numeroTentativasPossiveis = 0;

        // número de tentativas
        if (temp.getQtdTentativasLogin() == null) {
          numeroTentativas = 1;
        } else {
          numeroTentativas = temp.getQtdTentativasLogin().intValue() + 1;
        }

        ParametrosGerais parametrosGerais = (ParametrosGerais) parametrosDao
            .get(new Long(1));

        // número limite de tentativas
        if (parametrosGerais.getLimiteFalhasLogin() != null) {
          numeroTentativasPossiveis = parametrosGerais
              .getLimiteFalhasLogin().intValue();
        }

        if (numeroTentativas >= numeroTentativasPossiveis) {
          // Recupera o tempo de bloqueio do login
          tempoBloqueio = parametrosGerais.getTempoBloqueioLogin();
          temp.bloquearLogin(tempoBloqueio);
          validaSenha = 1; // Mensagem de login bloqueado
        } else if (numeroTentativas == (numeroTentativasPossiveis - 1)) {
          validaSenha = 2; // Mensagem de alerta pra bloqueio
          temp.incrementarQtdTentativasLogin();
        } else {
          validaSenha = 3; // Senha inválida
          temp.incrementarQtdTentativasLogin();
        }
      }

      funcionarioDao.save(temp);
    }

    if (funcionario == null) {
      return null;
    }

    validaSenha = 0;

    final int permiteGerencia = ControleAcessoCtrl.permiteGerencia(orgao,
        funcionario);

    return permiteGerencia == ControleAcessoCtrl.CA_ACESSO_PERMITIDO ? funcionario
        : null;
  }

  public Funcionario alteraSenha(final Orgao orgao, final String login,
      final String senhaAntiga, final String senhaNova)
      throws DaoException {

    if (orgao == null) {
      throw new IllegalArgumentException();
    }

    if (login == null || login.trim().length() == 0) {
      return null;
    }

    if (senhaAntiga == null || senhaAntiga.trim().length() == 0) {
      return null;
    }

    if (senhaNova == null || senhaNova.trim().length() == 0) {
      return null;
    }

    String sql = " select f from Funcionario as f " + "  where f.login = '"
        + login.replaceAll("'", "") + "'" + "    and f.situacao = '"
        + Funcionario.ATIVO + "'" + "    and ( f.perfil.id = "
        + Perfil.ADMINISTRADOR.getId() + "     or f.instituicao.id = "
        + orgao.getId() + " )";

    List funcionarios = funcionarioDao.query(sql);

    if (funcionarios == null || funcionarios.isEmpty()) {
      return null;
    }

    Funcionario funcionario = null;
    for (Iterator iter = funcionarios.iterator(); iter.hasNext();) {
      Funcionario temp = (Funcionario) iter.next();
      if (senhaAntiga.equals(temp.getSenha())) {
        funcionario = temp;
        break;
      }
    }
    if (funcionario == null) {
      return null;
    }

    final int permiteGerencia = ControleAcessoCtrl.permiteGerencia(orgao,
        funcionario);

    if (permiteGerencia == ControleAcessoCtrl.CA_ACESSO_PERMITIDO) {
      funcionario.setSenha(senhaNova);
      funcionarioDao.save(funcionario);
      return funcionario;
    }

    return null;

  }

  public int getValidaSenha() {
    return this.validaSenha;
  }

}
TOP

Related Classes of br.gov.serpro.ouvidoria.controller.LoginCtrl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.