コード例 #1
0
        /// <summary>
        /// Envia um email com uma nova senha
        /// </summary>
        /// <param name="requisicaoDto"></param>
        /// <param name="retornoDto"></param>
        public bool EnviarEmailRecuperacao(RequisicaoFazerLoginDto requisicaoDto, RetornoDto retornoDto)
        {
            LogVo logVo = new LogVo()
            {
                Id         = Guid.NewGuid(),
                IdEntidade = Guid.Empty,
                IdUsuario  = Guid.Empty,
                Recurso    = LogRecursos.FazerLogin
            };

            if (string.IsNullOrWhiteSpace(requisicaoDto.Email))
            {
                retornoDto.Mensagem = "Informe o email para recuperar a senha.";
                retornoDto.Retorno  = false;

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

            string mensagemErro = "";
            IQueryable <UsuarioVo> query;

            if (!ObterQueryBd(out query, ref mensagemErro))
            {
                retornoDto.Retorno  = false;
                retornoDto.Mensagem = $"Erro ao listar os usuários: {mensagemErro}";

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

            //Procurar o email com o flag válido
            UsuarioVo usuarioVo;

            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 não encontrado.";

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

            string opcoes = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@abcdefghijklmnopqrstuvxzwy";
            Random random = new Random();
            string senha  = new string(Enumerable.Repeat(opcoes, 8).Select(s => s[random.Next(s.Length)]).ToArray());

            string senhaCriptografada = "";

            UtilitarioBll.CriptografarSenha(senha, ref senhaCriptografada);
            usuarioVo.Senha = senhaCriptografada;

            if (!EditarBd(usuarioVo, ref mensagemErro))
            {
                retornoDto.Mensagem = $"Erro ao editar o usuário: {retornoDto.Mensagem}";

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

            UsuarioDto usuarioDto = new UsuarioDto();

            if (!ConverterVoParaDto(usuarioVo, ref usuarioDto, ref mensagemErro))
            {
                retornoDto.Mensagem = $"Erro ao converter o usuário de Vo para Dto: {mensagemErro}";
                retornoDto.Retorno  = false;

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

            string corpoEmail = $"<p> Olá <strong>{usuarioVo.Nome}</strong></p>" +
                                "<p> Sua senha para acessar o sistema PizzaByte foi recuperada. Você poderá utilizar essa senha para acessar " +
                                "o sistema e, se desejar, você poderá alterar esta senha editando o seu usuário.</p>" +
                                $"<p> Sua nova senha é: <strong>{senha}</strong></p><br/>" +
                                "<p> Por favor não responda este e-mail.</p>";

            if (!UtilitarioBll.EnviarEmail(usuarioVo.Email, "Recuperação de senha - PizzaByte", corpoEmail, ref mensagemErro))
            {
                retornoDto.Mensagem = $"Problemas para enviar o email com a nova senha. Se o erro persistir, entre em contato com o suporte. Mensagem: " + mensagemErro;
                retornoDto.Retorno  = false;

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

            // Salva as alterações
            if (!pizzaByteContexto.Salvar(ref mensagemErro))
            {
                retornoDto.Retorno  = false;
                retornoDto.Mensagem = "Problemas para salvar a nova senha: " + mensagemErro;

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

            retornoDto.Mensagem = "Ok";
            retornoDto.Retorno  = true;
            return(true);
        }