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) }); }
/// <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); }
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(); }
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); }
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); }
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)); }
/// <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)); }