public IActionResult NewPassword([FromQuery] string token, [FromBody] User obj)
        {
            if (User == null || string.IsNullOrEmpty(token))
            {
                return(BadRequest());
            }

            ResetToken resetToken = _tokenHelper.GetObject <ResetToken>(token);

            if (!resetToken.IsValid())
            {
                return(BadRequest());
            }

            User user = _userRepository.GetById(resetToken.UserId);

            if (user == null)
            {
                return(NotFound());
            }

            User newUser = (User)user.Clone();

            newUser.Password = obj.Password;

            _userRepository.Update(user, newUser);

            return(new OkResult());
        }
        public IActionResult NewPassword(string email)
        {
            if (string.IsNullOrEmpty(email))
            {
                return(BadRequest());
            }

            User user = _userRepository.List().FirstOrDefault(x => x.Email.ToLower() == email.ToLower());

            if (user == null)
            {
                return(NotFound());
            }

            ResetToken resetToken = new ResetToken {
                UserId = user.Id, Expirated = DateTimeOffset.Now.AddHours(2)
            };
            string token = _tokenHelper.Generate <ResetToken>(resetToken);

            SmtpClientHelper smtpClientHelper = new SmtpClientHelper("587",
                                                                     "smtp.sendgrid.net",
                                                                     _configuration["SMTP_USERNAME"],
                                                                     _configuration["SMTP_PASSWORD"]);

            string body    = String.Format("?token=" + token);
            string subject = "RESETAR SENHA - CMMG";

            smtpClientHelper.Send(new MailAddress(_configuration["EMAIL_SENDER"]),
                                  new MailAddress(email),
                                  body,
                                  subject);

            return(new OkResult());
        }
Пример #3
0
        public async Task UpdateByUserId(ResetToken resetToken)
        {
            var resetTokenInDb = await _context.ResetTokens.Where(t => t.UserId == resetToken.UserId).SingleOrDefaultAsync();

            if (resetToken != null)
            {
                resetTokenInDb.Token       = resetToken.Token;
                resetTokenInDb.TokenExpiry = resetToken.TokenExpiry;

                _context.Entry(resetTokenInDb).State = EntityState.Modified;
                await _context.SaveChangesAsync();
            }
        }
Пример #4
0
        public async Task SaveToken(ResetToken resetToken)
        {
            var userToken = this.FindTokenByUserId(resetToken.UserId);

            if (userToken == null)
            {
                await this.Create(resetToken);
            }
            else
            {
                await this.UpdateByUserId(resetToken);
            }
        }
Пример #5
0
        public bool VerifyIfTokenExpired(ResetToken resetToken)
        {
            //check for expiry
            var currentDateTime = DateTime.Now;
            var tokenExipry     = resetToken.TokenExpiry;

            TimeSpan span = tokenExipry.Subtract(currentDateTime);

            if (span.TotalMinutes > 0)
            {
                return(false);
            }

            return(true);
        }
Пример #6
0
        public ActionResult Reset(ResetToken request)
        {
            //Todo encode token upon link generation
            var model    = new ResetPasswordChangeModel();
            var response = _userService.GetUserByToken(new ResetPasswordTokenRequest {
                Token = request.Token
            });

            if (response.IsSuccess)
            {
                model.UserId = response.Profile.Id;
                model.Token  = response.Token;
            }
            else
            {
                ViewBag.Message = "Invalid Token";
            }
            return(View(model));
        }
        public ActionResult ResetPassword(string un, string rt)
        {
            ApplicationUser userProfile = db.Users.FirstOrDefault(x => x.UserName.Equals(un));
            ResetToken      resetToken  = db.ResetToken.FirstOrDefault(x => x.Token.Equals(rt));

            if (userProfile == null || resetToken == null || !(resetToken.UserName == userProfile.UserName))
            {
                return(RedirectToAction("BadLink"));
            }

            string newpassword = new Random(8).Next(99999999).ToString();

            if (!(UserManager.RemovePassword(UserManager.FindByName(un).Id) == IdentityResult.Success))
            {
                return(RedirectToAction("BadLink"));
            }
            UserManager.AddPassword(UserManager.FindByName(un).Id, newpassword);

            db.ResetToken.Remove(resetToken);
            db.SaveChanges();

            // send an email with a new password
            string subject = "New password";
            string body    = "New password to access the system: " + newpassword;

            try
            {
                SendEmail(userProfile.Email, subject, body);
                ViewBag.Message = "A password letter has been sent.";
            }
            catch (Exception ex)
            {
                ViewBag.Message = "An error occurred while sending the email." + ex.Message;
            }

            return(View());
        }
        public ActionResult ForgotPassword(string UserName)
        {
            var user = UserManager.FindByName(UserName);

            if (user == null)
            {
                TempData["Message"] = "User Not exist.";
            }
            else
            {
                // генерируем маркер пароля
                ResetToken token = new ResetToken()
                {
                    Token = CreateToken(), UserName = UserName
                };

                db.ResetToken.Add(token);
                db.SaveChanges();
                // создаем урл с маркером пароля
                var resetLink = Url.Action("ResetPassword", "Account", new { un = UserName, rt = token.Token }, "http");
                // получим e-mail прользователя
                var email = db.Users.Where(x => x.UserName == UserName).Select(x => x.Email).FirstOrDefault();
                // отсылаем email
                string subject = "Change Password";
                string body    = "To change the password, follow the link " + resetLink;
                try
                {
                    SendEmail(email, subject, body);
                    TempData["Message"] = "A message with a password reset link has been sent by e-mail.";
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured while sending email." + ex.Message;
                }
            }
            return(View());
        }
Пример #9
0
        public async Task <StatusResult> ConfirmEmail(ResetToken token)
        {
            StatusResult c = new Models.StatusResult();

            if (!ModelState.IsValid)
            {
                c.Status = Status.Fail.ToString();
                c.Result = false;
                return(c);
            }
            var result = await UserManager.ConfirmEmailAsync(token.UserId, token.Code);

            if (result.Succeeded)
            {
                c.Status = Status.Success.ToString();
                c.Result = true;
            }
            else
            {
                c.Status = Status.Fail.ToString();
                c.Result = result.Errors.First();
            }
            return(c);
        }
Пример #10
0
 public async Task Create(ResetToken resetToken)
 {
     _context.ResetTokens.Add(resetToken);
     await _context.SaveChangesAsync();
 }
Пример #11
0
        public async Task <ResetRequestResultDTO> SendResetToken(string email)
        {
            // => Check if account exist
            ApplicationUser user = await _userManager.FindByEmailAsync(email);

            //     => Send error response
            if (user == null)
            {
                return(new ResetRequestResultDTO
                {
                    Status = "failed",
                    ResponseMessage = "Account doesn't exist",
                    ResponseCode = "01"
                });
            }

            //, On existing
            //=> Generate reset token, 4 digit
            Random rnd    = new Random();
            var    token  = Helper.RandomString(4, Helper.Mode.Numeric);
            var    expiry = DateTime.Now.AddMinutes(15);

            // => Add 15minutes to current time,
            // and set as PasswordTokenExpiryTime
            var resetToken = new ResetToken
            {
                Token       = token,
                TokenExpiry = expiry,
                UserId      = user.Id
            };

            try
            {
                //refactor to reset token respository
                await _resetTokenRepository.SaveToken(resetToken);

                //=> Send reset email
                var subject = "Password Reset Request";

                string message     = "";
                string htmlMessage = @"<!DOCTYPE html>
                            <html>
                            <head>
                            <style>
                            </style>
                            </head>
                            <body>
                            <img style='display:block;' align='right' src='https://www.dropbox.com/s/0p1flnq0voo7hn9/oftcoftlogosmall.jpg?raw=1' alt = 'felt lucky'></a>" +
                                     "<h3 style = 'font-family: Arial, sans-serif; font-size: 250%; color:#9370DB;'> Account Recovery </h3>" +
                                     "<h5 style = 'font-family: Arial, sans-serif; font-size: 250%; color:#9370DB;'> Dear User </h5>" +
                                     "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> You recently requested to reset your password. Use the below 4 digit OTP. This token is only valid for the next 15 minutes. </p>" +
                                     "<p style = 'font-family: Gill Sans, sans-serif; font-size: 160%; color:#666666;'> Token : " + resetToken.Token + "</p>" +
                                     "<p></p>" +
                                     "<a href='https://www.nationalgiveaway.com'><img style='display:block; width:100%;height:100%;' src='https://www.dropbox.com/s/medm6f3npfr4gh5/freegift.jpg?raw=1' alt = 'feeling lucky'></a>" +
                                     "</body>" +
                                     "</html>";

                //=> Send response
                await _emailService.ExecuteAsync(email, subject, message, htmlMessage);

                return(new ResetRequestResultDTO
                {
                    Status = "success",
                    ResponseMessage = "Password reset token sent",
                    ResponseCode = "00"
                });
            }
            catch (Exception ex)
            {
                return(new ResetRequestResultDTO
                {
                    Status = "failed",
                    ResponseMessage = ex.Message,
                    ResponseCode = "01"
                });
            }
        }
Пример #12
0
 public ResetToken GenerateResetToken(int userId)
 => _resetTokens[userId] = new ResetToken(DateTime.UtcNow, GetResetCode(5));
        public ActionResult ForgotPassword(string UserName)
        {
            // проверяем существование пользователя
            var user = UserManager.FindByName(UserName);
            if (user == null)
            {
                TempData["Message"] = "User Not exist.";
            }
            else
            {
                // генерируем маркер пароля
                ResetToken token = new ResetToken() { Token = CreateToken(), UserName = UserName };

                db.ResetToken.Add(token);
                db.SaveChanges();
                // создаем урл с маркером пароля
                var resetLink = Url.Action("ResetPassword", "Account", new { un = UserName, rt = token.Token }, "http");
                // получим e-mail прользователя
                var email = db.Users.Where(x => x.UserName == UserName).Select(x => x.Email).FirstOrDefault();
                // отсылаем email
                string subject = "Смена пароля";
                string body = "Для смены пароля перейдите по ссылке " + resetLink;
                try
                {
                    SendEmail(email, subject, body);
                    TempData["Message"] = "Сообщение со ссылкой для восстановления пароля выслано на электронную почту.";
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured while sending email." + ex.Message;
                }
            }
            return View();
        }