protected override void ExecuteRequest(HttpContext context) { if (Request == null || string.IsNullOrWhiteSpace(Request.Hash) || string.IsNullOrWhiteSpace(Request.PasswordHash)) { context.Response.StatusCode = StatusCodes.Status400BadRequest; return; } PasswordRecoveryData passwordRecoveryData = _passwordRecoveryDataRepository.GetByHash(Request.Hash).GetAwaiter().GetResult(); if (passwordRecoveryData != null) { User user = _userRepository.GetUserById(passwordRecoveryData.UserId).GetAwaiter().GetResult(); if (user != null) { user.PasswordHash = Request.PasswordHash; _userRepository.Update(user); } _passwordRecoveryDataRepository.Delete(passwordRecoveryData.Id).GetAwaiter().GetResult(); } else { context.Response.StatusCode = StatusCodes.Status400BadRequest; } }
protected override void ExecuteRequest(HttpContext context) { if (Request == null || (string.IsNullOrWhiteSpace(Request.Login) && string.IsNullOrWhiteSpace(Request.EmailAddress))) { context.Response.StatusCode = StatusCodes.Status400BadRequest; return; } User user = _userRepository.GetUserByLoginOrEmail(Request.Login, Request.EmailAddress).GetAwaiter().GetResult(); if (user != null) { PasswordRecoveryData passwordRecoveryData = new PasswordRecoveryData() { UserId = user.Id, Date = DateTime.Now, Hash = string.Format("{0:X}", DateTime.Now.ToString().GetHashCode()) }; passwordRecoveryData = _passwordRecoveryDataRepository.Insert(passwordRecoveryData).GetAwaiter().GetResult(); var section = Configuration.GetSection(EMAIL_SECTION); var client = new SmtpClient() { Host = section.GetValue <string>(CLIENT_HOST_KEY), Port = section.GetValue <int>(CLIENT_Port_KEY), EnableSsl = true, UseDefaultCredentials = false, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential( section.GetValue <string>(CRENDENTIAL_LOGIN_KEY), section.GetValue <string>(CRENDENTIAL_PASSWORD_KEY)) }; { MailAddress from = new MailAddress( section.GetValue <string>(EMAIL_FROM_KEY), section.GetValue <string>(EMAIL_DISPLAY_NAME_KEY), System.Text.Encoding.UTF8); MailAddress to = new MailAddress(user.Email); MailMessage message = new MailMessage(from, to); message.Body = $@"Hi { user.Login}, You ask for a password recovery because you forgot your password. In order to change your password, use the following link: { FRONT_PASSWORD_RECOVERY_URL + passwordRecoveryData.Hash } You will be asked to enter your new password and to confirm this password. Thanky you, LevelUp"; message.BodyEncoding = System.Text.Encoding.UTF8; message.Subject = "LevelUp - Password Recovery"; message.SubjectEncoding = System.Text.Encoding.UTF8; client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); string userState = "LevelUp - Password Recovery"; client.SendAsync(message, userState); } } else { context.Response.StatusCode = StatusCodes.Status400BadRequest; } }