Exemplo n.º 1
0
        public async Task <GoblinIdentityResetPasswordTokenModel> RequestResetPasswordAsync(
            GoblinIdentityRequestResetPasswordModel model,
            CancellationToken cancellationToken = default)
        {
            var userEntity = await _userRepo.Get(x => x.Email == model.Email && x.EmailConfirmedTime != null)
                             .FirstOrDefaultAsync(cancellationToken).ConfigureAwait(true);

            if (userEntity == null)
            {
                throw new GoblinException(nameof(GoblinIdentityErrorCode.UserNotFound),
                                          GoblinIdentityErrorCode.UserNotFound);
            }

            var resetPasswordTokenModel = new GoblinIdentityResetPasswordTokenModel
            {
                SetPasswordToken           = userEntity.SetPasswordToken = StringHelper.Generate(6, false, false),
                SetPasswordTokenExpireTime = userEntity.SetPasswordTokenExpireTime = GoblinDateTimeHelper.SystemTimeNow.Add(SystemSetting.Current.SetPasswordTokenLifetime)
            };

            _userRepo.Update(userEntity,
                             x => x.SetPasswordToken,
                             x => x.SetPasswordTokenExpireTime
                             );

            await GoblinUnitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(true);

            return(resetPasswordTokenModel);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SubmitForgotPassword(ForgotPasswordModel model,
                                                               CancellationToken cancellationToken = default)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.WarningMessage = Messages.InvalidData;

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

            try
            {
                var requestResetPasswordModel = new GoblinIdentityRequestResetPasswordModel
                {
                    Email = model.Email
                };

                var resetPasswordToken =
                    await GoblinIdentityHelper.RequestResetPasswordAsync(requestResetPasswordModel, cancellationToken);

                var resetPasswordMessage = $"Your reset password code is {resetPasswordToken.SetPasswordToken}.";

                if (resetPasswordToken.SetPasswordTokenExpireTime.HasValue)
                {
                    resetPasswordMessage +=
                        $"<br />Code will expire at {resetPasswordToken.SetPasswordTokenExpireTime.Value.ToString("f")}";
                }

                var newEmailModel = new GoblinNotificationNewEmailModel
                {
                    ToEmails = new List <string>
                    {
                        model.Email
                    },
                    Subject  = $"{SystemSetting.Current.ApplicationName} | Reset Password Code",
                    HtmlBody = resetPasswordMessage
                };

                await GoblinNotificationHelper.SendAsync(newEmailModel, cancellationToken);

                return(View("ResetPassword", new ResetPasswordModel
                {
                    Email = model.Email
                }));
            }
            catch (GoblinException e)
            {
                ViewBag.ErrorMessage = e.ErrorModel.Message;

                return(View("ForgotPassword", model));
            }
            catch (Exception e)
            {
                ViewBag.ErrorMessage = e.Message;

                return(View("ForgotPassword", model));
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> RequestResetPassword([FromBody] GoblinIdentityRequestResetPasswordModel model, CancellationToken cancellationToken = default)
        {
            var resetPasswordToken = await _userService.RequestResetPasswordAsync(model, cancellationToken);

            return(Ok(resetPasswordToken));
        }
Exemplo n.º 4
0
        public static async Task <GoblinIdentityResetPasswordTokenModel> RequestResetPasswordAsync(GoblinIdentityRequestResetPasswordModel model, CancellationToken cancellationToken = default)
        {
            ValidationHelper.Validate <GoblinIdentityRequestResetPasswordModelValidator, GoblinIdentityRequestResetPasswordModel>(model);

            try
            {
                var endpoint = GetRequest(model.LoggedInUserId).AppendPathSegment(GoblinIdentityEndpoints.RequestResetPassword);

                var resetPasswordToken = await endpoint
                                         .PostJsonAsync(model, cancellationToken : cancellationToken)
                                         .ReceiveJson <GoblinIdentityResetPasswordTokenModel>()
                                         .ConfigureAwait(true);

                return(resetPasswordToken);
            }
            catch (FlurlHttpException ex)
            {
                await FlurlHttpExceptionHelper.HandleErrorAsync(ex).ConfigureAwait(true);

                return(null);
            }
        }