public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);
            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

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

            bodyFitTrackerContext.BodyMeasurements.Add(new BodyMeasurement(appUser, 11, 12, null, 60, 120, DateTime.Today, MeasurementSystem.Imperial));
            bodyFitTrackerContext.BodyMeasurements.Add(new BodyMeasurement(appUser, 11, 20, null, 60, 120, DateTime.Today, MeasurementSystem.Imperial));
            bodyFitTrackerContext.SaveChanges();

            var userAccessorMock = new Mock <IUserAccessor>();

            userAccessorMock.Setup(x => x.GetCurrentUserId()).Returns(appUser.AppUserId);

            MapperConfiguration mapperConfiguration = new MapperConfiguration(opts =>
            {
                opts.AddProfile(new BodyMeasurementsMappingProfile());
            });
            IMapper mapper = mapperConfiguration.CreateMapper();


            _getAllBodyMeasurementsHandler = new GetAllBodyMeasurementsHandler(bodyFitTrackerContext, mapper, userAccessorMock.Object);
        }
        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)
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates a new <see cref="BodyMeasurement"/> based off of the <paramref name="createOrEditBodyMeasurementRequest"/>, if the measurement
        /// does not already exist. If the measurement described in the request does exist, then the existing measurement will be edited.
        /// </summary>
        public void Handle(CreateOrEditBodyMeasurementRequest createOrEditBodyMeasurementRequest)
        {
            bool measurementIsBeingCreated = createOrEditBodyMeasurementRequest.IdOfBodyMeasurementToEdit == null;

            if (measurementIsBeingCreated)
            {
                BodyMeasurement bodyMeasurement = CreateBodyMeasurement(createOrEditBodyMeasurementRequest);

                _bodyFitTrackerContext.BodyMeasurements.Add(bodyMeasurement);
                _bodyFitTrackerContext.SaveChanges();
            }

            else
            {
                TryEditingMeasurement(createOrEditBodyMeasurementRequest);
            }
        }
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);
            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

            _appUserEmail = appUser.Email;
            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();

            // add the password reset record after the app user has been added, so the appUserId is generated
            bodyFitTrackerContext.PasswordResets.Add(new PasswordReset(_passwordResetToken, appUser.AppUserId, DateTime.Now.AddHours(10)));
            bodyFitTrackerContext.SaveChanges();

            var passwordHasherMock = new Mock <IPasswordHasher>();

            passwordHasherMock.Setup(x => x.GeneratePassword(It.IsAny <string>())).Returns((string password) => (password, ""));

            _resetPasswordStepTwoHandler = new ResetPasswordStepTwoHandler(bodyFitTrackerContext, passwordHasherMock.Object);
        }
Ejemplo n.º 5
0
        public void Handle(ChangeProfileSettingsRequest changeProfileSettingsRequest)
        {
            int     currentUserId = _userAccessor.GetCurrentUserId();
            AppUser appUser       = _bodyFitTrackerContext.AppUsers.Where(x => x.AppUserId == currentUserId).First();

            appUser.Email = changeProfileSettingsRequest.Email;
            // all units must be in imperial in the database
            appUser.Height = MeasurementConverter.ConvertLength(changeProfileSettingsRequest.Height, changeProfileSettingsRequest.UnitsOfMeasure, MeasurementSystem.Imperial);
            appUser.MeasurementSystemPreference = changeProfileSettingsRequest.UnitsOfMeasure;

            _bodyFitTrackerContext.SaveChanges();
        }
Ejemplo n.º 6
0
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);

            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

            bodyFitTrackerContext.PasswordResets.Add(new PasswordReset(_unexpiredToken, appUser.AppUserId, DateTime.Now.AddHours(10)));
            bodyFitTrackerContext.PasswordResets.Add(new PasswordReset(_expiredToken, appUser.AppUserId, DateTime.Now.AddHours(-1)));
            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();

            _validateResetPasswordTokenHandler = new ValidateResetPasswordTokenHandler(bodyFitTrackerContext);
        }
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);

            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();
            _userId = appUser.AppUserId;

            var userAccessorMock = new Mock <IUserAccessor>();

            userAccessorMock.Setup(x => x.GetCurrentUserId()).Returns(appUser.AppUserId);

            _changeProfileSettingsHandler = new ChangeProfileSettingsHandler(bodyFitTrackerContext, userAccessorMock.Object);
        }
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);
            AppUser appUser = new AppUser("*****@*****.**", _userPassword, "", 60, GenderType.Male, MeasurementSystem.Imperial);

            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();

            var passwordHasherMock = new Mock <IPasswordHasher>();
            var userAccessorMock   = new Mock <IUserAccessor>();

            userAccessorMock.Setup(x => x.GetCurrentUserId()).Returns(appUser.AppUserId);
            passwordHasherMock.Setup(x => x.ValidatePlainTextPassword(_userPassword, It.IsAny <string>(), It.IsAny <string>())).Returns(true);
            passwordHasherMock.Setup(x => x.GeneratePassword(It.IsAny <string>())).Returns((string password) => (password, ""));

            _changePasswordHandler = new ChangePasswordHandler(bodyFitTrackerContext, passwordHasherMock.Object, userAccessorMock.Object);
        }
Ejemplo n.º 9
0
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);

            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();

            var jwtGeneratorMock   = new Mock <IJwtGenerator>();
            var passwordHasherMock = new Mock <IPasswordHasher>();

            jwtGeneratorMock.Setup(x => x.CreateToken(It.IsAny <AppUser>())).Returns("");
            passwordHasherMock.Setup(x => x.GeneratePassword(It.IsAny <string>())).Returns(("", ""));

            _createUserHandler = new CreateUserHandler(bodyFitTrackerContext, passwordHasherMock.Object, jwtGeneratorMock.Object);
        }
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);

            AppUser dom = new AppUser("*****@*****.**", "", "", 10, GenderType.Male, MeasurementSystem.Imperial);                                     // will have an id of 1
            AppUser bob = new AppUser("*****@*****.**", "", "", 10, GenderType.Male, MeasurementSystem.Imperial);                                     // will have an id of 2

            bodyFitTrackerContext.BodyMeasurements.Add(new BodyMeasurement(dom, 11, 12, null, 60, 100, DateTime.Today, MeasurementSystem.Imperial)); // will have id of 1
            bodyFitTrackerContext.BodyMeasurements.Add(new BodyMeasurement(bob, 11, 20, null, 60, 100, DateTime.Today, MeasurementSystem.Imperial)); // will have an id of 2

            bodyFitTrackerContext.SaveChanges();

            var userAccessorMock = new Mock <IUserAccessor>();

            userAccessorMock.Setup(x => x.GetCurrentUserId()).Returns(dom.AppUserId);

            _deleteBodyMeasurementHandler = new DeleteBodyMeasurementHandler(bodyFitTrackerContext, userAccessorMock.Object);
        }
Ejemplo n.º 11
0
        public void SetUp()
        {
            BodyFitTrackerContext bodyFitTrackerContext = DatabaseConnectionFactory.GetInMemoryDatabase(true);

            AppUser appUser = new AppUser("*****@*****.**", "", "", 60, GenderType.Male, MeasurementSystem.Imperial);

            bodyFitTrackerContext.Add(appUser);
            bodyFitTrackerContext.SaveChanges();
            _userEmail = appUser.Email;

            var emailSender = new Mock <IEmailSender>();
            var passwordResetTokenGenerator = new Mock <IPasswordResetTokenGenerator>();

            emailSender.Setup(x => x.SendEmail(It.IsAny <EmailMessage>()));
            passwordResetTokenGenerator.Setup(x => x.CreateResetToken()).Returns(("reset-token"));

            _resetPasswordStepOneHandler = new ResetPasswordStepOneHandler(bodyFitTrackerContext, emailSender.Object, passwordResetTokenGenerator.Object);
        }
        public void Handle(ResetPasswordStepOneRequest resetPasswordStepOneRequest)
        {
            AppUser appUser = _bodyFitTrackerContext.AppUsers.Where(x => x.Email == resetPasswordStepOneRequest.Email).FirstOrDefault();

            if (appUser == null)
            {
                return;
            }

            string        resetToken    = _passwordResetTokenGenerator.CreateResetToken();
            DateTime      expiration    = DateTime.Now.AddHours(1);
            PasswordReset passwordReset = new PasswordReset(resetToken, appUser.AppUserId, expiration);

            EmailMessage emailMessage = CreateEmailMessage(appUser, resetToken);

            _emailSender.SendEmail(emailMessage);

            _bodyFitTrackerContext.PasswordResets.Add(passwordReset);
            _bodyFitTrackerContext.SaveChanges();
        }
        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));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Deletes the measurement with the id <paramref name="bodyMeasurementIdToDelete"/>. If no measurement is found then a RestException will be thrown. If
        /// the measurement being deleted does not belong to the current user, then a RestException will be thrown.
        /// </summary>
        /// <param name="bodyMeasurementIdToDelete"></param>
        public void Handle(int bodyMeasurementIdToDelete)
        {
            Dictionary <string, string> errors = new Dictionary <string, string>();

            BodyMeasurement bodyMeasurementToRemove = _bodyFitTrackerContext.BodyMeasurements
                                                      .Where(b => b.BodyMeasurementId == bodyMeasurementIdToDelete).FirstOrDefault();

            if (bodyMeasurementToRemove == null)
            {
                errors.Add("", $"The bodymeasurement with id {bodyMeasurementIdToDelete} was not found");
                throw new RestException(HttpStatusCode.NotFound, errors);
            }

            int currentUserId = _userAccessor.GetCurrentUserId();

            if (currentUserId != bodyMeasurementToRemove.AppUserId)
            {
                errors.Add("", "Access to another user's body measurement is denied");
                throw new RestException(HttpStatusCode.Forbidden, errors);
            }

            _bodyFitTrackerContext.BodyMeasurements.Remove(bodyMeasurementToRemove);
            _bodyFitTrackerContext.SaveChanges();
        }
        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));
        }