Exemplo n.º 1
0
        public Response <RequestPasswordResetDto> RequestPasswordReset(RequestPasswordResetRequest request)
        {
            try
            {
                SetUserRepositoryByEmail(request.EmailAddress);

                var user = _userRepository.FindUserByEmail(request.EmailAddress);

                if (user == null)
                {
                    throw new ServiceException(ResponseCode.NotFound, "Selected Agents does not exist.");
                }

                var expiryLength = _settingRepository.FindSettingAsInt(SettingName.PasswordResetLength);

                var passwordResetRequest = new ForgottenPassword(Guid.NewGuid());

                user.AddPasswordResetRequest(passwordResetRequest, expiryLength);

                _userRepository.Save();

                var dto = new RequestPasswordResetDto
                {
                    UserGuid = user.UserGuid,
                    Key      = passwordResetRequest.Key
                };

                return(new Response <RequestPasswordResetDto>(dto));
            }
            catch (Exception e)
            {
                return(HandleException <RequestPasswordResetDto>(e));
            }
        }
        public async Task <IActionResult> Index(RequestPasswordResetDto dto)
        {
            ViewBag.ReturnUrl = _options.SpaSpellingClientBaseUrl;
            if (this.ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(dto.Emailaddress.ToLower());

                if (user != null)
                {
                    var token = await _userManager.GeneratePasswordResetTokenAsync(user);

                    var host = this.Request.Host.Value.Replace("[", string.Empty).Replace("]", string.Empty);
                    var url  = $"{this.Request.Scheme}://{host}/PasswordRecovery/ResetPassword?token={WebUtility.UrlEncode(token)}";

                    var message = $"A password reset has be requested.<br /> <a href=\"{url}\">click here to reset your password.</a>";
                    await _emailSender.SendEmailAsync(user.Email, "College Spelling App Password Reset", message);
                }
            }
            ViewBag.Submitted = true;
            return(View());
        }
Exemplo n.º 3
0
        public async Task <IActionResult> ForgotPassword([FromBody] RequestPasswordResetDto requestPasswordResetDto)
        {
            var userIp = Request.HttpContext.Connection.RemoteIpAddress;

            if (_cacheService.IsNumberOfAttempsExceededRecovery(userIp))
            {
                if (requestPasswordResetDto.RecaptchaResponse == null ||
                    !await _reCaptchaValidation.ValidateRecaptcha(requestPasswordResetDto.RecaptchaResponse))
                {
                    _cacheService.UpdateAttempsCountRecovery(userIp);
                    _logger.LogInformation($"Invalid captcha validation: {userIp}");
                    return(BadRequest(_reCaptchaValidation.CreateCaptchaResponseRecovery(false, true)));
                }
            }
            var result     = _cacheService.HandleAttempsRecovery(userIp);
            var resetToken = await _changePasswordService.SendResetLink(requestPasswordResetDto.Email);

            _logger.LogInformation(resetToken == null
                ? $"User with email: {requestPasswordResetDto.Email} fails to generate token"
                : $"User with email: {requestPasswordResetDto.Email} send reset password request with token: {resetToken}"
                                   );
            return(Ok(_reCaptchaValidation.CreateCaptchaResponseRecovery(true, result)));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> RequestPasswordReset(RequestPasswordResetDto requestPasswordResetDto)
        {
            IDatabaseContext context = _getDatabaseContext();
            User?            user    = await context.Users.FirstOrDefaultAsync(u => u.Email == requestPasswordResetDto.Email);

            if (user == null)
            {
                return(BadRequest(RequestStringMessages.NoProfileWithEmailFound));
            }

            var passwordReset = new PasswordReset
            {
                User      = user,
                Requested = DateTime.UtcNow
            };

            context.PasswordResets.Add(passwordReset);

            await context.SaveChangesAsync();

            await _notificationService.SendPasswordResetTokenAsync(passwordReset.Token, user);

            return(Ok());
        }
Exemplo n.º 5
0
        public async Task <IActionResult> RequestPasswordReset([FromBody] RequestPasswordResetDto requestPasswordResetDto)
        {
            var response = await _authServices.RequestPasswordReset(requestPasswordResetDto.Email);

            return(StatusCode(response.Status, response));
        }