public Object liberarUsuario(String login) {
   Usuario u = pesquisarPorLogin(login);
   u.setContadorSenhaInvalida(0);
   u.setStatus(EnumUsuarioAutenticado.SUCESSO);
   alterar(u);
   return "Liberado";
 }
 public List<String> listarUsuariosString() {
   List<String> usuarios = new ArrayList<String>();
   for (Usuario u : listarUsuarios()) {
     usuarios.add(u.toString());
   }
   return usuarios;
 }
 private void trataSenhaInvalidaDoUsuario(Usuario usuarioRecuperadoDoBD) {
   int numeroDeChancesRestantes = 3 - usuarioRecuperadoDoBD.getContadorSenhaInvalida();
   boolean deveBloquearUsuario = numeroDeChancesRestantes == 0;
   if (deveBloquearUsuario) {
     usuarioRecuperadoDoBD.setStatus(EnumUsuarioAutenticado.USUARIO_BLOQUEADO);
   }
   getDAO().atualizar(usuarioRecuperadoDoBD);
 }
 public Boolean usuarioEstaLogado(String login, String senha) {
   Object o = null;
   try {
     o = autentica(login, senha);
   } catch (ErroNegocio e) {
     if (e.getErro().equals(EnumUsuarioAutenticado.USUARIO_INEXISTENTE.getMensagem())) {
       return false;
     }
   }
   Usuario u = null;
   if (existe(o) && o instanceof Usuario) {
     u = (Usuario) o;
   }
   boolean usuarioEstaLogado = false;
   if (existe(u)) {
     usuarioEstaLogado = Sessoes.usuarioLogado(u.getLogin());
   }
   return usuarioEstaLogado;
 }
 @Override
 public Usuario inserir(Usuario usuario) throws SysErr, ErroNegocio {
   log("Inserindo " + getNomeEntidade());
   boolean usuarioJaExiste = getFinder().findByLogin(usuario.getLogin()) != null;
   if (usuarioJaExiste) {
     throw new ErroNegocio(EnumUsuarioCadastrado.USUARIO_DUPLICADO.getMensagem());
   } else {
     Usuario uCadastrado = getDAO().inserir(usuario);
     boolean ocorreuAlgumErro = uCadastrado == null;
     if (ocorreuAlgumErro) {
       throw new ErroNegocio(EnumUsuarioCadastrado.ERRO_AO_CRIAR_USUARIO.getMensagem());
     } else {
       Sessoes.addSessao(uCadastrado);
       return uCadastrado;
     }
   }
 }
 public List<Movimentacao> findByUsuarioComo(String login) {
   Usuario u = FinderUsuario.getInstancia().findByLogin(login);
   return u.getMovimentacoes();
 }
  /**
   * Metodo de Autenticacao de Usuario
   *
   * @param login
   * @param senha
   * @return
   */
  public Usuario autentica(String login, String senha) throws Erro {
    log("Autenticando " + getNomeEntidade());
    Usuario u = new Usuario();
    u.setLogin(login);
    Usuario usuarioRecuperadoDoBD = new Usuario();
    usuarioRecuperadoDoBD = getFinder().findByLogin(u.getLogin());

    // Primeiro verificamos se o usuario existe.
    if (existe(usuarioRecuperadoDoBD)) {
      // Verificamos se usuario e senha informado batem com o banco.
      boolean usuarioConfere =
          (login.equals(usuarioRecuperadoDoBD.getLogin())
              && senha.equals(usuarioRecuperadoDoBD.getSenha()));
      boolean usuarioEstaBloqueado =
          !(usuarioRecuperadoDoBD.getStatus() == null
              || !usuarioRecuperadoDoBD
                  .getStatus()
                  .equals(EnumUsuarioAutenticado.USUARIO_BLOQUEADO));
      boolean ehFinalDeSemana = UtilsData.ehFinalDeSemana();
      boolean ehHorarioComercial = UtilsData.ehHorarioComercial();
      boolean ehAdm = ehAdm(usuarioRecuperadoDoBD);

      boolean usuarioPodeAcessar =
          usuarioConfere
              && ((!usuarioEstaBloqueado && !ehFinalDeSemana && ehHorarioComercial) || ehAdm);

      if (usuarioPodeAcessar) {
        log(getNomeEntidade() + " autenticado com sucesso");
      } else if (!usuarioConfere) {
        log(getNomeEntidade() + " informado com senha inválida...");
        usuarioRecuperadoDoBD.setContadorSenhaInvalida(
            usuarioRecuperadoDoBD.getContadorSenhaInvalida() + 1);
        boolean avisaUsuarioBloqueioNoProximoErro =
            (3 - usuarioRecuperadoDoBD.getContadorSenhaInvalida()) == 1;
        trataSenhaInvalidaDoUsuario(usuarioRecuperadoDoBD);

        if (avisaUsuarioBloqueioNoProximoErro) {
          throw new ErroNegocio(
              EnumUsuarioAutenticado.SENHA_INVALIDA_ULTIMA_TENTATIVA.getMensagem());
        } else {
          throw new ErroNegocio(EnumUsuarioAutenticado.SENHA_INVALIDA.getMensagem());
        }
      } else if (usuarioEstaBloqueado) {
        throw new ErroNegocio(EnumUsuarioAutenticado.USUARIO_BLOQUEADO.getMensagem());
      } else if (ehFinalDeSemana) {
        throw new ErroNegocio(EnumUsuarioAutenticado.FINAL_DE_SEMANA.getMensagem());
      } else if (!ehHorarioComercial) {
        throw new ErroNegocio(EnumUsuarioAutenticado.FORA_DO_HORARIO_COMERCIAL.getMensagem());
      }
    } else {
      log(EnumUsuarioAutenticado.USUARIO_INEXISTENTE.getMensagem());
      throw new ErroNegocio(EnumUsuarioAutenticado.USUARIO_INEXISTENTE.getMensagem());
    }
    return usuarioRecuperadoDoBD;
  }
 private boolean ehAdm(Usuario usuarioRecuperadoDoBD) {
   return usuarioRecuperadoDoBD.getPerfil().equals(Role.ADMINISTRADOR);
 }