Ejemplo n.º 1
0
        public IActionResult Update(ParticipantEditViewModel model, int id)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    int participantId = Int32.Parse(HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);

                    if (participantId != id)
                    {
                        ModelState.AddModelError("Email", "Participante não encontrado.");

                        return(View("Edit", model));
                    }

                    Participant participant = _participantRepository.GetById(id);

                    participant.Name      = model.Name;
                    participant.Birthdate = model.Birthdate;
                    participant.Gender    = model.Gender;

                    if (model.Password != null)
                    {
                        participant.Password = HashExtension.Create(model.Password, Environment.GetEnvironmentVariable("AUTH_SALT"));
                    }

                    _participantRepository.Update(participant);
                    _participantRepository.SaveChanges();

                    TempData["Success"] = "Dados do participante atualizado com sucesso!";

                    return(RedirectToAction("Edit"));
                }
            }
            catch (Exception exception)
            {
                TempData["Error"] = "Internal server error";
                _logger.LogError("Participant update error: " + exception);
            }

            return(View("Edit", model));
        }
Ejemplo n.º 2
0
        public IActionResult Store(ParticipantRegisterViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Participant participant = _participantRepository.FindUniqueByEmail(model.Email);

                    if (participant != null)
                    {
                        ModelState.AddModelError("Email", "E-mail já cadastrado");

                        return(View("Index", model));
                    }

                    participant = new Participant
                    {
                        Name      = model.Name,
                        Email     = model.Email,
                        Birthdate = model.Birthdate,
                        Gender    = model.Gender,
                        Password  = HashExtension.Create(model.Password, Environment.GetEnvironmentVariable("AUTH_SALT")),
                        CreatedAt = DateTime.Now
                    };

                    _participantRepository.Add(participant);
                    _participantRepository.SaveChanges();

                    TempData["Success"] = "Registro efetuado com sucesso!";

                    return(RedirectToAction("Index", "Login"));
                }
            }
            catch (Exception exception)
            {
                TempData["Error"] = "Internal server error";
                _logger.LogError("Login error: " + exception);
            }

            return(View("Index", model));
        }
Ejemplo n.º 3
0
        public IActionResult Store(UserCreateViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    User userEmail = _userRepository.FindUniqueByEmail(model.Email);

                    if (userEmail != null)
                    {
                        ModelState.AddModelError("Email", "E-mail já cadastrado");

                        return(View("Create", model));
                    }

                    User user = new User
                    {
                        Name      = model.Name,
                        Email     = model.Email,
                        Password  = HashExtension.Create(model.Password, Environment.GetEnvironmentVariable("AUTH_SALT")),
                        CreatedAt = DateTime.Now
                    };

                    _userRepository.Add(user);
                    _userRepository.SaveChanges();

                    TempData["Success"] = "Usuário registrado com sucesso!";

                    return(RedirectToAction("Index"));
                }
            }
            catch (Exception exception)
            {
                TempData["Error"] = "Erro ao realizar cadastro";
                _logger.LogError("User create error: " + exception);
            }

            return(View("Create", model));
        }
Ejemplo n.º 4
0
        public IActionResult Update(UserEditViewModel model, int id)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    User user = _userRepository.GetById(model.Id);

                    if (user != null)
                    {
                        user.Name  = model.Name;
                        user.Email = model.Email;

                        if (model.Password != null)
                        {
                            user.Password = HashExtension.Create(model.Password, Environment.GetEnvironmentVariable("AUTH_SALT"));
                        }

                        _userRepository.Update(user);
                        _userRepository.SaveChanges();

                        TempData["Success"] = "Usuário atualizado com sucesso!";

                        return(RedirectToAction("Edit", new { id = model.Id }));
                    }
                    else
                    {
                        TempData["Error"] = "Usuário não encontrado.";
                    }
                }
            }
            catch (Exception exception)
            {
                TempData["Error"] = "Erro ao atualizar usuário.";
                _logger.LogError("User update error: " + exception);
            }

            return(RedirectToAction("Edit", new { id = model.Id }));
        }
Ejemplo n.º 5
0
        public IActionResult Reset(ResetPasswordViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    PasswordReset passwordReset = _passwordResetRepository.FindUniqueByEmail(model.Email);

                    if (passwordReset != null && passwordReset.Token.Equals(model.Token))
                    {
                        Participant participant = _participantRepository.FindUniqueByEmail(model.Email);

                        participant.Password = HashExtension.Create(model.Password, Environment.GetEnvironmentVariable("AUTH_SALT"));

                        _participantRepository.Update(participant);
                        _participantRepository.SaveChanges();

                        _passwordResetRepository.Remove(passwordReset.Id);
                        _passwordResetRepository.SaveChanges();

                        TempData["Success"] = "Senha atualizada com sucesso!";

                        return(RedirectToAction("Index", "Login"));
                    }

                    ModelState.AddModelError("Email", "E-mail não encontrado ou token expirado!");
                }
            }
            catch (Exception exception)
            {
                _logger.LogError("Reset password error: " + exception);
                TempData["Error"] = "Internal server error";
            }

            return(View("Index", model));
        }
Ejemplo n.º 6
0
        public IActionResult Send(ForgotPasswordViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Participant participant = _participantRepository.FindUniqueByEmail(model.Email);

                    if (participant == null)
                    {
                        ModelState.AddModelError("Email", "E-mail não encontrado na base de dados.");

                        return(View("Index", model));
                    }

                    StringBuilder builder = new StringBuilder();
                    builder.Append(RandomString(4, true));
                    string hash = HashExtension.Create(builder.ToString(), Environment.GetEnvironmentVariable("AUTH_SALT"));
                    hash = hash.Replace(" ", String.Empty);

                    PasswordReset passwordReset = new PasswordReset
                    {
                        Email = model.Email,
                        Token = hash
                    };

                    PasswordReset old = _passwordResetRepository.FindUniqueByEmail(model.Email);

                    if (old != null)
                    {
                        _passwordResetRepository.Remove(old.Id);
                    }

                    _passwordResetRepository.Add(passwordReset);
                    _passwordResetRepository.SaveChanges();

                    var message = new MimeMessage();
                    message.To.Add(new MailboxAddress(participant.Name, model.Email));
                    message.From.Add(new MailboxAddress("Contact Promotion", "*****@*****.**"));
                    message.Subject = "Promotion - Reset Password";
                    message.Body    = new TextPart(TextFormat.Html)
                    {
                        Text = "<strong>Olá!</strong>" + "<br>Clique no link para recuperar sua senha: " +
                               "<a href='https://localhost:5001/participant/reset-password?email=" + model.Email + "&token=" + hash + "' target='_blank'>Recuperar senha</a>"
                    };

                    using (var client = new SmtpClient())
                    {
                        client.Connect("smtp.mailtrap.io", 587, false);
                        client.Authenticate("", "");
                        client.Send(message);
                        client.Disconnect(true);
                    }

                    TempData["Success"] = "Cheque sua caixa de e-mail!";

                    return(RedirectToAction("Index"));
                }
            }
            catch (Exception exception)
            {
                _logger.LogError("Contact send error: " + exception);
                return(StatusCode(500));
            }

            return(View("Index", model));
        }