コード例 #1
0
        public ActionResult GeraSenha(CadastraSenha cadastraSenha)
        {
            if (ModelState.IsValid)
            {
                var response        = Request["g-recaptcha-response"];
                var secretKey       = "6LfsAD4UAAAAAGW_7DCXe5bmCeqQ5a3Rq3iyR7Vv";
                var client          = new WebClient();
                var recaptcha       = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secretKey, response));
                var objetoRecaptcha = JObject.Parse(recaptcha);
                var sucesso         = (bool)objetoRecaptcha.SelectToken("success");

                if (!sucesso)
                {
                    ModelState.AddModelError("UsuarioInvalido", "Marque a opção \"Não sou um robô.\"");
                    return(View("Index"));
                }

                var pessoa = pessoaDAO.BuscaPessoaAtivaPorCpfCnpj(cadastraSenha.Cpf) ?? pessoaDAO.BuscaPessoaComAcessosMultiplosPorCpfCnpj(cadastraSenha.Cpf);
                if (pessoa == null)
                {
                    ModelState.AddModelError("UsuarioInvalido", "O CPF informado não possui conta ativa no sistema. Entre em contato com o Clube...");
                    return(View("Index"));
                }

                var contato = contatoDAO.BuscaContatoEmailPorPessoa(pessoa.Id);
                if (string.IsNullOrEmpty(contato.Contatos))
                {
                    ModelState.AddModelError("UsuarioInvalido", "O usuário não possui e-mail cadastrado. Favor, ligar para o Clube e cadastrar um e-mail válido.");
                    return(View("Index"));
                }

                var novaSenha = GeradorSenhaAleatoria.GerarSenha();
                var usuario   = portalUsuarioDAO.BuscaUsuarioPorIdPessoa(pessoa.Id);
                if (usuario.IdPessoa <= 0)
                {
                    var incluir = portalUsuarioDAO.IncluirUsuario(pessoa, novaSenha);
                    if (!incluir)
                    {
                        ModelState.AddModelError("UsuarioInvalido", "Ocorreu um erro ao incluir o usuário. Tente novamente...");
                        return(View("Index"));
                    }
                }
                else
                {
                    var alterar = portalUsuarioDAO.AlterarSenha(usuario.IdPessoa, novaSenha);
                    if (!alterar)
                    {
                        ModelState.AddModelError("UsuarioInvalido", "Ocorreu um erro ao alterar a senha. Tente novamente...");
                        return(View("Index"));
                    }
                }

                var html = new StringBuilder();
                html.Append("<!DOCTYPE html>");
                html.Append("<html>");
                html.Append("<head>");
                html.Append("  <meta charset='utf-8' />");
                html.Append("</head>");
                html.Append("<body>");
                html.Append("  <p>");
                html.Append("    Nova Senha: " + novaSenha);
                html.Append("  </p>");
                html.Append("</body>");
                html.Append("</html>");

                var mail = new MailMessage();
                mail.From = new MailAddress("*****@*****.**", "Clube Conteza (Gerenciador)");
                mail.To.Add(new MailAddress(contato.Contatos));
                mail.Subject    = "Nova Senha (Clube Conteza)";
                mail.IsBodyHtml = true;
                mail.Body       = html.ToString();

                var smtp = new SmtpClient();
                smtp.Host        = "email-ssl.com.br";
                smtp.Port        = 587;
                smtp.EnableSsl   = true;
                smtp.Credentials = new NetworkCredential("*****@*****.**", "2016@ral");

                try
                {
                    smtp.Send(mail);
                }
                catch (Exception)
                {
                    ModelState.AddModelError("UsuarioInvalido", "Falha ao enviar o e-mail. Tente novamente...");
                    return(View("Index"));
                }
                finally
                {
                    smtp.Dispose();
                }

                return(RedirectToAction("Index", "Login"));
            }
            else
            {
                return(View("Index"));
            }
        }