예제 #1
0
        /// <summary>
        /// Faz o login com email e senha
        /// </summary>
        public bool FazerLogin(RequisicaoFazerLoginDto requisicaoDto, ref RetornoFazerLoginDto retornoDto)
        {
            LogVo logVo = new LogVo()
            {
                Id         = Guid.NewGuid(),
                IdEntidade = Guid.Empty,
                IdUsuario  = Guid.Empty,
                Recurso    = LogRecursos.FazerLogin
            };

            //Validar email e senha
            if (string.IsNullOrWhiteSpace(requisicaoDto.Email))
            {
                retornoDto.Retorno  = false;
                retornoDto.Mensagem = "O email é obrigatório para fazer o login";

                logVo.Mensagem = retornoDto.Mensagem;
                logBll.RegistrarLogVo(logVo);
                return(false);
            }

            if (string.IsNullOrWhiteSpace(requisicaoDto.Senha))
            {
                retornoDto.Retorno  = false;
                retornoDto.Mensagem = "A senha é obrigatória para fazer o login";

                logVo.Mensagem = retornoDto.Mensagem;
                logBll.RegistrarLogVo(logVo);
                return(false);
            }

            string nomeUsuario = "Suporte";
            Guid   idUsuario   = UtilitarioBll.RetornarIdUsuarioSuporte();
            bool   usuarioAdm  = false;

            //Se for o usuário suporte
            if (requisicaoDto.Email.Trim().ToUpper() == "SUPORTE")
            {
                string senhaCriptografada = "";
                UtilitarioBll.CriptografarSenha(DateTime.Now.AddDays(-2).Date.ToString("dd/MM/yyyy").Replace("/", ""), ref senhaCriptografada);

                if (requisicaoDto.Senha.Trim() != senhaCriptografada)
                {
                    retornoDto.Retorno  = false;
                    retornoDto.Mensagem = "Senha de suporte incorreta.";

                    logVo.Mensagem = retornoDto.Mensagem;
                    logBll.RegistrarLogVo(logVo);
                    return(false);
                }

                usuarioAdm = true;
            }
            else
            {
                string mensagemErro = "";
                IQueryable <UsuarioVo> query;
                if (!ObterQueryBd(out query, ref mensagemErro))
                {
                    retornoDto.Retorno  = false;
                    retornoDto.Mensagem = $"Falha ao listar os usuários: {mensagemErro}";

                    logVo.Mensagem = retornoDto.Mensagem;
                    logBll.RegistrarLogVo(logVo);
                    return(false);
                }

                UsuarioVo usuarioVo;

                //Procurar o email com o flag ativo
                query = query.Where(u => u.Email.Trim() == requisicaoDto.Email.Trim() && u.Inativo == false);

                try
                {
                    usuarioVo = query.FirstOrDefault();
                }
                catch (Exception ex)
                {
                    retornoDto.Retorno  = false;
                    retornoDto.Mensagem = $"Falha ao obter o usuário do banco de dados: {ex.Message}";

                    logVo.Mensagem = retornoDto.Mensagem;
                    logBll.RegistrarLogVo(logVo);
                    return(false);
                }

                if (usuarioVo == null)
                {
                    retornoDto.Retorno  = false;
                    retornoDto.Mensagem = $"Email ou senha inválidos. ";

                    logVo.Mensagem = retornoDto.Mensagem;
                    logBll.RegistrarLogVo(logVo);
                    return(false);
                }

                if (!requisicaoDto.Senha.Equals(usuarioVo.Senha))
                {
                    retornoDto.Retorno  = false;
                    retornoDto.Mensagem = $"Email ou senha inválidos ";

                    logVo.Mensagem = retornoDto.Mensagem;
                    logBll.RegistrarLogVo(logVo);
                    return(false);
                }

                usuarioAdm  = usuarioVo.Administrador;
                nomeUsuario = usuarioVo.Nome;
                idUsuario   = usuarioVo.Id;
            }

            string identificacao = DateTime.Now.ToString("dd/MM/yyyy hh:mm") + UtilitarioBll.RetornaGuidValidação() + idUsuario.ToString() + $"Adm={(usuarioAdm ? "1" : "0")}";
            string identificacaoCriptografada = "";

            if (!UtilitarioBll.CriptografarString(identificacao, ref identificacaoCriptografada))
            {
                retornoDto.Mensagem = "Falha ao fazer o login: Não foi possível obter a identificação.";
                retornoDto.Retorno  = false;

                logVo.Mensagem = retornoDto.Mensagem;
                logBll.RegistrarLogVo(logVo);
                return(false);
            }

            retornoDto.IdUsuario            = idUsuario;
            retornoDto.NomeUsuario          = nomeUsuario;
            retornoDto.Identificacao        = identificacaoCriptografada;
            retornoDto.UsuarioAdministrador = usuarioAdm;
            retornoDto.Retorno = true;
            return(true);
        }