예제 #1
0
        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;
            }
        }