示例#1
0
        public IHttpActionResult RecuperarSenha(String email, String ip)
        {
            try
            {
                if (String.IsNullOrEmpty(email))
                {
                    return(Json(new { erro = "S", mensagem = "O e-mail é um campo obrigatório para recuperação de senha." }));
                }

                IUsuarioRepository repository = container.Resolve <IUsuarioRepository>();

                var usuario = repository.ObterPeloEmail(email);

                if (usuario != null)
                {
                    if (!String.IsNullOrEmpty(usuario.Ativo) && usuario.Ativo == "N")
                    {
                        return(Json(new { erro = "S", mensagem = "Este usuário está bloqueado e não pode alterar sua senha, para mais detalhes entre em contato com o suporte." }));
                    }

                    IRecuperacaoSenhaRepository recuperaRepository = container.Resolve <IRecuperacaoSenhaRepository>();
                    var recupera = new RecuperacaoSenha();
                    recupera.Email  = email;
                    recupera.Data   = DateTime.Now;
                    recupera.Chave  = Guid.NewGuid().ToString();
                    recupera.IP     = ip;
                    recupera.Status = 0;
                    recuperaRepository.Save(recupera);

                    StringBuilder mensagem = new StringBuilder();

                    mensagem.Append("Nós recebemos uma solicitação de recuperação de senha do seu e-mail no  <br><br>");
                    mensagem.Append(String.Format("IP: {0} <br><br>", ip));
                    mensagem.Append(String.Format(@"Para criar uma nova senha clique <a href=""https://xpto.com/recuperarsenha.php?key={0}"" target=""_blank"">aqui</a>", recupera.Chave));

                    //Envia e-mail em uma nova task
                    Task.Run(() =>
                    {
                        container.Resolve <IEmailService>().EnviarEmail(email, Constantes.EMAIL_REMETENTE, "Suporte ", "Recuperação de senha - Super x", mensagem.ToString(), true);
                    });
                }

                return(Json(new { erro = "N", mensagem = "Processo realizado com sucesso! Caso este e-mail esteja cadastrado vocé irá receber um link para mudar a senha em seu e-mail." }));
            }
            catch (Exception ex)
            {
                container.Resolve <ErroSistemaCRUDService>().Salvar(ex);
                String mensagem        = !String.IsNullOrEmpty(ex.Message) ? ex.Message : String.Empty;
                String mensagemInterna = ex.InnerException != null && String.IsNullOrEmpty(ex.InnerException.Message) ? ex.InnerException.Message : String.Empty;
                String assunto         = "Erro na API de Recuperação de senha de usuário";
                String mensagem2       = String.Format("Exceção: {0} \n Exceção interna: {1}, \n Data/Hora: {2} \n Email: {3}: ", mensagem, mensagemInterna, DateTime.Now, email);

                container.Resolve <IEmailService>().EnviarEmail(Constantes.EMAIL_DESTINATARIO, Constantes.EMAIL_REMETENTE, "Suporte ", assunto, mensagem2, false);

                return(Json(new { erro = "S", mensagem = "Ocorreu um erro inesperado ao tentar recuperar sua senha , não se preocupe, o suporte já foi acionado e vai resolver o problema e te informar assim que for verificado." }));
            }
        }
示例#2
0
        public async Task <IActionResult> EnviarCodigo([FromRoute] string email)
        {
            try
            {
                Usuario usuario = await context.Usuario.FirstOrDefaultAsync(u => u.Email.Equals(email));

                if (usuario != null)
                {
                    EmailService emailService = new EmailService();

                    //criação do codigo
                    string codigo = new Random().Next(100000, 999999).ToString();

                    string assunto = "Recuperação de senha Jarbas";

                    string mensagem =
                        $"Olá {usuario.Nome},\n\n" +
                        $"Este é o seu código para recuperação de senha: {codigo}\n" +
                        "Se você não solicitou uma recuperação de senha no app Jarbas, ignore este e-mail.\n\n" +
                        "Atenciosamente,\n" +
                        "Project Jarbas Team";

                    bool emailEnviado = await emailService.SendEmail(email, mensagem, assunto, usuario.Nome);

                    if (emailEnviado)
                    {
                        var recuperacaoSenha = new RecuperacaoSenha
                        {
                            UsuarioId = usuario.Id,
                            Codigo    = codigo
                        };

                        //busca se existe algum codigo antigo, para que o usuário tenha somente um codigo para recuperação de senha
                        var oldCodigo = await context.RecuperacaoSenha.FirstOrDefaultAsync(r => r.UsuarioId.Equals(usuario.Id));

                        if (oldCodigo != null)
                        {
                            context.RecuperacaoSenha.Remove(oldCodigo);
                        }

                        context.RecuperacaoSenha.Add(recuperacaoSenha);
                        await context.SaveChangesAsync();

                        return(Ok());
                    }
                    else
                    {
                        ModelState.AddModelError("Email", "Email não pode ser enviado, tente novamente");
                        return(BadRequest(ModelState.Values.SelectMany(e => e.Errors)));
                    }
                }
                else
                {
                    ModelState.AddModelError("Usuario", "Usuário não cadastrado no sistema.");
                    return(NotFound(ModelState.Values.SelectMany(e => e.Errors)));
                }
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }