public CreateUserResult Handle(CreateUserRequest request)
        {
            Dictionary <string, string> errors = new Dictionary <string, string>();

            bool emailIsTaken = _bodyFitTrackerContext.AppUsers.Where(a => a.Email == request.Email).Any();

            if (emailIsTaken)
            {
                errors.Add("email", "That email address is already taken");
                return(new CreateUserResult {
                    Errors = errors
                });
            }

            (string hashedPassword, string salt) = _passwordHasher.GeneratePassword(request.Password);

            AppUser appUser = new AppUser(request.Email, hashedPassword, salt, request.Height, request.Gender, request.UnitsOfMeasure);

            _bodyFitTrackerContext.AppUsers.Add(appUser);
            _bodyFitTrackerContext.SaveChanges();

            return(new CreateUserResult
            {
                Succeeded = true,
                Token = _jwtGenerator.CreateToken(appUser)
            });
        }
        public (string userId, string error) Login(LoginForemViewModel model)
        {
            var    hashedPassword = passwordHasher.GeneratePassword(model.Password);
            string modelErrors    = string.Empty;

            var userId = Data
                         .Users
                         .Where(u => u.Username == model.Username && u.Password == hashedPassword)
                         .Select(u => u.Id)
                         .FirstOrDefault();

            if (userId == null)
            {
                modelErrors = "Wrong Login Information, UserName or Password are incorect";
            }

            return(userId, modelErrors);
        }
        public ChangePasswordResult Handle(ChangePasswordRequest changePasswordRequest)
        {
            Dictionary <string, string> errors = new Dictionary <string, string>();
            int     userId  = _userAccessor.GetCurrentUserId();
            AppUser appUser = _bodyFitTrackerContext.AppUsers.Where(x => x.AppUserId == userId).First();

            bool oldPasswordIsCorrect = _passwordHasher.ValidatePlainTextPassword(changePasswordRequest.CurrentPassword, appUser.HashedPassword, appUser.Salt);

            if (!oldPasswordIsCorrect)
            {
                errors.Add("currentPassword", "The password is incorrect");
                return(new ChangePasswordResult(false, errors));
            }

            (string hashedPassword, string salt) = _passwordHasher.GeneratePassword(changePasswordRequest.NewPassword);

            appUser.HashedPassword = hashedPassword;
            appUser.Salt           = salt;
            _bodyFitTrackerContext.SaveChanges();

            return(new ChangePasswordResult(true));
        }
        public ResetPasswordStepTwoResult Handle(ResetPasswordStepTwoRequest resetPasswordStepTwoRequest)
        {
            ValidateResetPasswordTokenHandler validateResetPasswordTokenHandler = new ValidateResetPasswordTokenHandler(_bodyFitTrackerContext);
            ResetPasswordValidationResult     validationResult = validateResetPasswordTokenHandler.Handle(resetPasswordStepTwoRequest.ResetPasswordToken);

            if (!validationResult.Succeeded)
            {
                return(new ResetPasswordStepTwoResult(false, validationResult.ErrorMessage));
            }

            PasswordReset passwordReset = _bodyFitTrackerContext.PasswordResets
                                          .Where(x => x.Token == resetPasswordStepTwoRequest.ResetPasswordToken).First();
            AppUser appUser = passwordReset.AppUser;

            (string hashedPassword, string salt) = _passwordHasher.GeneratePassword(resetPasswordStepTwoRequest.NewPassword);

            appUser.HashedPassword = hashedPassword;
            appUser.Salt           = salt;

            _bodyFitTrackerContext.PasswordResets.Remove(passwordReset);
            _bodyFitTrackerContext.SaveChanges();

            return(new ResetPasswordStepTwoResult(true));
        }