Beispiel #1
0
        internal bool Autenticar(string login, String senhaHash, int timeout, out String userSessionId)
        {
            bool usuarioValido = false;

            userSessionId = string.Empty;
            Usuario usuarioAuditoria = new Usuario();

            usuarioAuditoria.Login = login;            //Necessario para auditoria

            try
            {
                usuarioAuditoria.Ip = HttpContext.Current.Request.UserHostAddress;

                #region Busca Usuario/Credenciado e verifica validade
                Usuario usuario = _busUsuario.Obter(login);

                //Deve retornar APENAS se usuario não existir
                if (usuario == null)
                {
                    Validacao.Add(Mensagem.Login.LoginSenhaInvalido);
                    return(false);
                }

                usuarioValido        = String.Equals(usuario.senhaHash, senhaHash);
                usuarioAuditoria.Id  = usuario.Id;
                usuarioAuditoria.TID = usuario.TID;

                //Buscar funcionario e grava num de tentativas
                Funcionario funcionario = _da.ObterFuncionarioLogin(usuario.Id, timeout);

                //Deve retornar APENAS se funcionario não existir
                if (funcionario == null)
                {
                    Validacao.Add(Mensagem.Login.LoginSenhaInvalido);
                    return(false);
                }

                funcionario.Usuario = usuario;
                #endregion

                #region Execução Obrigatoria [Independe de status do funcionario]
                string strSessionForcarLogoff = string.Empty;

                //Não se pode char busUsuario Autenticar antes do metodo no finally!!!
                if (usuarioValido && funcionario.Logado)
                {
                    GerenciarAutenticacao.Deslogar(login, true);

                    if (usuarioValido && funcionario.ForcarLogout)
                    {
                        strSessionForcarLogoff = funcionario.SessionId;

                        if (!String.Equals(funcionario.Usuario.Ip, usuarioAuditoria.Ip))
                        {
                            Validacao.Add(Mensagem.Login.SessaoDerrubada);
                        }
                    }
                }

                #endregion

                #region 2 - Bloqueio
                if (funcionario.Tentativa > _config.Obter <Int32>(ConfiguracaoCredenciado.KeyNumTentativas))
                {
                    funcionario.Situacao = 2;                    // 2 - Bloqueado
                    funcionario.Usuario  = new Usuario()
                    {
                        Login = login
                    };
                    _da.AlterarSituacao(funcionario.Id, funcionario.Situacao, null, funcionario);
                    Validacao.Add(Mensagem.Login.FuncionarioBloqueado);
                    return(false);
                }

                if (funcionario.Situacao == 2)                // 2-Ausente
                {
                    Validacao.Add(Mensagem.Login.SituacaoInvalida(Situacoes.Single(x => x.Id == funcionario.Situacao).Nome));
                    return(false);
                }
                #endregion

                //Fazer aqui
                //Acesso não permitido nestes horários e/ou dia! Entre em contato com o administrador do sistema

                #region 6 - Senha Vencida
                // 6 -Senha Vencida
                if (_da.VerificarSenhaVencida(usuario.Id, funcionario))
                {
                    //Mensagem gerada na interface
                    return(false);
                }
                #endregion

                #region 4 - Ausente
                if (funcionario.Situacao == 4)                // 4-Ausente
                {
                    Validacao.Add(Mensagem.Login.SituacaoInvalida(Situacoes.Single(x => x.Id == funcionario.Situacao).Nome));
                    return(false);
                }
                #endregion

                #region Mensagem Número de tentativas
                if (!usuarioValido && funcionario.Situacao != 2)                //2 - Bloqueado
                {
                    Validacao.Add(Mensagem.Login.NumTentativas(funcionario.Tentativa, _config.Obter <Int32>(ConfiguracaoCredenciado.KeyNumTentativas)));
                }
                #endregion

                //Efetiva a autenticação de credenciado [Atenção para o finally]
                if (usuarioValido)
                {
                    funcionario.SessionId = Guid.NewGuid().ToString();
                    userSessionId         = funcionario.SessionId;             //Parâmetro out deste metodo!!!
                    _da.Autenticar(funcionario, strSessionForcarLogoff);
                }
            }
            catch
            {
                usuarioValido = false;
                throw;
            }
            finally
            {
                //Autentica Usuario, gera historico e linha de auditoria
                _busUsuario.Autenticar(usuarioAuditoria, usuarioValido, (int)eExecutorTipo.Interno);
            }

            return(usuarioValido);
        }
Beispiel #2
0
        internal bool Autenticar(string login, String senhaHash, int timeout, out String userSessionId, BancoDeDados banco)
        {
            bool usuarioValido = false;

            userSessionId = string.Empty;
            Usuario usuarioAuditoria = new Usuario();

            usuarioAuditoria.Login = login;            //Necessario para auditoria

            try
            {
                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                {
                    bancoDeDados.IniciarTransacao();
                    usuarioAuditoria.Ip = HttpContext.Current.Request.UserHostAddress;

                    #region Busca Usuario/Credenciado e verifica validade

                    Usuario usuario = _busUsuario.Obter(login, bancoDeDados);

                    //Deve retornar APENAS se usuario não existir
                    if (usuario == null)
                    {
                        Validacao.Add(Mensagem.Login.LoginSenhaInvalido);
                        return(false);
                    }

                    usuarioValido        = String.Equals(usuario.senhaHash, senhaHash);
                    usuarioAuditoria.Id  = usuario.Id;
                    usuarioAuditoria.TID = usuario.TID;

                    //Buscar Credenciado e grava num de tentativas
                    CredenciadoPessoa credenciado = _da.ObterCredenciadoLogin(usuario.Id, timeout);

                    //Deve retornar APENAS se Credenciado não existir
                    if (credenciado == null)
                    {
                        Validacao.Add(Mensagem.Login.LoginSenhaInvalido);
                        return(false);
                    }

                    credenciado.Usuario = usuario;

                    #endregion

                    #region Execução Obrigatoria [Independe de status do credenciado]

                    string strSessionForcarLogoff = string.Empty;

                    //Não se pode char busUsuario Autenticar antes do metodo no finally!!!
                    if (usuarioValido && credenciado.Logado)
                    {
                        GerenciarAutenticacao.Deslogar(login, true);

                        if (usuarioValido && credenciado.ForcarLogout)
                        {
                            strSessionForcarLogoff = credenciado.SessionId;

                            if (!String.Equals(credenciado.Usuario.Ip, usuarioAuditoria.Ip))
                            {
                                Validacao.Add(Mensagem.Login.SessaoDerrubada);
                            }
                        }
                    }

                    #endregion

                    #region Bloqueio e mensagem de bloqueado

                    if (credenciado.Tentativa > _config.Obter <Int32>(ConfiguracaoCredenciado.KeyNumTentativas))
                    {
                        credenciado.Situacao = (int)eCredenciadoSituacao.Bloqueado;
                        credenciado.Usuario  = new Usuario()
                        {
                            Login = login
                        };
                        _da.AlterarSituacao(credenciado, bancoDeDados);
                        Validacao.Add(Mensagem.Login.FuncionarioBloqueado);
                        return(false);
                    }

                    if (credenciado.Situacao == (int)eCredenciadoSituacao.Bloqueado)
                    {
                        Validacao.Add(Mensagem.Login.SituacaoInvalida(CredenciadoSituacoes.Single(x => x.Id == credenciado.Situacao).Nome));
                        return(false);
                    }

                    #endregion

                    #region Aguardando Chave

                    if (credenciado.Situacao == (int)eCredenciadoSituacao.AguardandoAtivacao || credenciado.Situacao == (int)eCredenciadoSituacao.AguardandoChave)
                    {
                        Validacao.Add(Mensagem.Login.AguardandoChave);
                        return(false);
                    }

                    #endregion

                    //Fazer aqui
                    //Acesso não permitido nestes horários e/ou dia! Entre em contato com o administrador do sistema

                    #region Valida senha vencida

                    // 4 -Senha Vencida
                    if (_da.VerificarSenhaVencida(usuario.Id))
                    {
                        //Mensagem gerada na interface
                        return(false);
                    }

                    #endregion

                    #region Mensagem Número de tentativas

                    if (!usuarioValido && credenciado.Situacao != (int)eCredenciadoSituacao.Bloqueado)
                    {
                        Validacao.Add(Mensagem.Login.NumTentativas(credenciado.Tentativa, _config.Obter <Int32>(ConfiguracaoCredenciado.KeyNumTentativas)));
                    }

                    #endregion

                    //Efetiva a autenticação de credenciado [Atenção para o finally]
                    if (usuarioValido)
                    {
                        credenciado.SessionId = Guid.NewGuid().ToString();
                        userSessionId         = credenciado.SessionId;                 //Parâmetro out deste metodo!!!
                        _da.Autenticar(credenciado, strSessionForcarLogoff, bancoDeDados);
                    }

                    bancoDeDados.Commit();
                }
            }
            catch
            {
                usuarioValido = false;
                throw;
            }
            finally
            {
                //Autentica Usuario, gera historico e linha de auditoria
                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                {
                    bancoDeDados.IniciarTransacao();

                    _busUsuario.Autenticar(usuarioAuditoria, usuarioValido, (int)eExecutorTipo.Credenciado, bancoDeDados);

                    bancoDeDados.Commit();
                }
            }

            return(usuarioValido);
        }