/// <summary> /// GetUserPasswordSalt Uses the UserAccount.Id to map to the Salt.Is on the DB /// /// </summary> /// <param name="userFromDataBase"></param> /// <returns> /// /// string with the value of the salt associated with the user to the Manager /// /// </returns> public ResponseDto <PasswordSalt> GetUserPasswordSalt(int?id) { try { var salt = (from salts in authenticationContext.PasswordSalts where salts.Id == id select salts.Salt).FirstOrDefault(); var passwordSalt = new PasswordSalt { Salt = salt }; return(new ResponseDto <PasswordSalt> { Data = passwordSalt }); } catch (Exception) { return(new ResponseDto <PasswordSalt>() { Data = null, Error = GeneralErrorMessages.GENERAL_ERROR }); } }
/// <summary> /// The CreateFirstTimeSsoUser method. /// Creates a first time user registered from the SSO. /// <para> /// @author: Jennifer Nguyen /// @updated: 04/09/2018 /// </para> /// </summary> /// <param name="userAccountDto"></param> /// <returns></returns> public ResponseDto <bool> CreateFirstTimeSsoUser(UserAccountDto userAccountDto) { var createFirstTimeSsoUserPreLogicStrategy = new CreateFirstTimeSsoUserPreLogicValidationStrategy(userAccountDto); var saltGenerator = new SaltGenerator(); var payloadHasher = new PayloadHasher(); // Validate data transfer object var result = createFirstTimeSsoUserPreLogicStrategy.ExecuteStrategy(); if (result.Error != null) { return(new ResponseDto <bool> { Data = false, Error = result.Error }); } // Hash password var passwordSalt = new PasswordSalt(saltGenerator.GenerateSalt(128)); var userAccount = new UserAccount(username: userAccountDto.Username, password: userAccountDto.Password, isActive: true, isFirstTimeUser: true, roleType: userAccountDto.RoleType); userAccount.Password = payloadHasher.Sha256HashWithSalt(passwordSalt.Salt, userAccount.Password); // Validate domain models var createFirstTimeSsoUserPostLogicStrategy = new CreateFirstTimeSsoUserPostLogicValidationStrategy(userAccount, passwordSalt); result = createFirstTimeSsoUserPostLogicStrategy.ExecuteStrategy(); if (result.Error != null) { return(new ResponseDto <bool> { Data = false, Error = result.Error }); } // Store a user from Single Sign On registration request using (var userGateway = new UserGateway()) { var gatewayResult = userGateway.StoreSsoUser(userAccount, passwordSalt); if (gatewayResult.Data == false) { return(new ResponseDto <bool>() { Data = gatewayResult.Data, Error = GeneralErrorMessages.GENERAL_ERROR }); } } return(new ResponseDto <bool>() { Data = true }); }
public override int GetHashCode() { unchecked { int hashCode = typeof(User).GetHashCode(); hashCode ^= 7 * hashCode + 11 * Name.GetHashCode(); hashCode ^= 7 * hashCode + 11 * PasswordSalt.GetHashCode(); hashCode ^= 7 * hashCode + 11 * PasswordHash.GetHashCode(); return(hashCode); } }
/// <summary> /// Constructor for CreateIndividualPostLogicValidationStrategy /// <para> /// @author: Jennifer Nguyen /// @updated: 03/13/2018 /// </para> /// </summary> /// <param name="userAccount"></param> /// <param name="securityQuestions"></param> /// <param name="securityAnswerSalts"></param> /// <param name="passwordSalt"></param> /// <param name="userClaims"></param> /// <param name="userProfile"></param> public CreateFirstTimeIndividualPostLogicValidationStrategy(UserAccount userAccount, PasswordSalt passwordSalt, UserClaims userClaims, UserProfile userProfile, IList <SecurityQuestion> securityQuestions, IList <SecurityAnswerSalt> securityAnswerSalts) { _userAccount = userAccount; _securityQuestions = securityQuestions; _securityAnswerSalts = securityAnswerSalts; _passwordSalt = passwordSalt; _userClaims = userClaims; _userProfile = userProfile; _securityQuestionValidator = new SecurityQuestionValidator(); _securityAnswerSaltValidator = new SecurityAnswerSaltValidator(); _userValidator = new UserValidator(); }
public override int GetHashCode() { unchecked { int hash = 17; hash = hash * 23 + (BusinessEntityId == default(int) ? 0 : BusinessEntityId.GetHashCode()); hash = hash * 23 + (ModifiedDate == default(DateTime) ? 0 : ModifiedDate.GetHashCode()); hash = hash * 23 + (PasswordHash == null ? 0 : PasswordHash.GetHashCode()); hash = hash * 23 + (PasswordSalt == null ? 0 : PasswordSalt.GetHashCode()); hash = hash * 23 + (Rowguid == default(Guid) ? 0 : Rowguid.GetHashCode()); return(hash); } }
public void Should_PassValidation_When_GivenValidUserAccountAndPasswordSalt() { // Arrange var userAccount = new UserAccount(username: "******", password: "******", isActive: false, isFirstTimeUser: true, roleType: "public"); var passwordSalt = new PasswordSalt(salt: "@$!@#a2131asda@#!"); var createFirstTimeSsoUserPostLogicValidationStrategy = new CreateFirstTimeSsoUserPostLogicValidationStrategy(userAccount, passwordSalt); // Act var result = createFirstTimeSsoUserPostLogicValidationStrategy.ExecuteStrategy(); // Assert result.Data.Should().BeTrue(); result.Error.Should().BeNull(); }
public void Should_FailValidation_When_GivenEmptyUsername() { // Arrange var userAccount = new UserAccount(username: "", password: "******", isActive: false, isFirstTimeUser: false, roleType: "public"); var passwordSalt = new PasswordSalt(salt: "@$!@#a2131asda@#!"); var createFirstTimeSsoUserPostLogicValidationStrategy = new CreateFirstTimeSsoUserPostLogicValidationStrategy(userAccount, passwordSalt); // Act var result = createFirstTimeSsoUserPostLogicValidationStrategy.ExecuteStrategy(); // Assert result.Data.Should().BeFalse(); result.Error.Should().Be("Something went wrong. Please try again later."); }
public User ToModel() { return(new User() { Id = Id, FirstName = FirstName, LastName = LastName, Username = Username, Password = Password, PasswordHash = PasswordHash.ToArray(), PasswordSalt = PasswordSalt.ToArray(), Role = Role.ToModel(), Enabled = Enabled, }); }
public void Should_PassValidation_When_AllRulesPass() { // Arrange var passwordSaltValidator = new PasswordSaltValidator(); var passwordSalt = new PasswordSalt() { Salt = "!Q2w#E4r" }; // Act var result = passwordSaltValidator.Validate(passwordSalt); var isValid = result.IsValid; // Assert isValid.Should().Be(true); }
private string GetHashedPassword(string password) { string hashedPassword; using (var sha = SHA256.Create()) { var computedHash = sha.ComputeHash( PasswordSalt .ToByteArray() .Concat(Encoding.Unicode.GetBytes(PasswordSalt + password + _constantSalt)).ToArray()); hashedPassword = Convert.ToBase64String(computedHash); } return(hashedPassword); }
public void Should_FailValidation_When_SaltIsNull() { // Arrange var passwordSaltValidator = new PasswordSaltValidator(); var passwordSalt = new PasswordSalt() { Salt = null }; // Act var result = passwordSaltValidator.Validate(passwordSalt); var isValid = result.IsValid; // Assert isValid.Should().Be(false); }
/// <summary> /// The UpdatePassword method. /// Update database models associated with updating a user's password. /// <para> /// @author: Jennifer Nguyen /// @updated: 04/22/2018 /// </para> /// </summary> /// <param name="userAccount"></param> /// <param name="passwordSalt"></param> /// <returns>ResponseDto with true or false boolean</returns> public ResponseDto <bool> UpdatePassword(UserAccount userAccount, PasswordSalt passwordSalt) { using (var dbContextTransaction = context.Database.BeginTransaction()) { try { // Get Id from username userAccount.Id = (from account in context.UserAccounts where account.Username == userAccount.Username select account.Id).FirstOrDefault(); context.SaveChanges(); // Set UserId to dependencies passwordSalt.Id = userAccount.Id; context.SaveChanges(); // Update UserAccount context.UserAccounts.AddOrUpdate(userAccount); // Update PasswordSalt context.PasswordSalts.AddOrUpdate(passwordSalt); context.SaveChanges(); // Commit transaction to database dbContextTransaction.Commit(); // Return a true ResponseDto return(new ResponseDto <bool>() { Data = true }); } catch (Exception) { // Rolls back the changes saved in the transaction dbContextTransaction.Rollback(); // Returns a false ResponseDto return(new ResponseDto <bool>() { Data = false, Error = GeneralErrorMessages.GENERAL_ERROR }); } } }
public bool CheckPassword(LoginRequestDto request) { using (var connection = new SqlConnection(connectionString)) using (var command = new SqlCommand()) { command.Connection = connection; connection.Open(); command.CommandText = "SELECT Password,Salt FROM Student WHERE IndexNumber=@number"; command.Parameters.AddWithValue("number", request.Login); using var read = command.ExecuteReader(); if (read.Read()) { return(PasswordSalt.Validate(request.Haslo, read["Salt"].ToString(), read["Password"].ToString())); } return(false); } }
/// <summary> /// /// </summary> /// <param name="dto"></param> /// <param name="userAccount"></param> /// <param name="passwordSalt"></param> /// <param name="userProfile"></param> /// <param name="securityQuestions"></param> /// <param name="securityAnswerSalts"></param> /// <returns></returns> private ResponseDto <bool> MapUserDtoToModel(RegisterUserDto dto, out UserAccount userAccount, out PasswordSalt passwordSalt, out UserProfile userProfile, out IList <SecurityQuestion> securityQuestions, out IList <SecurityAnswerSalt> securityAnswerSalts) { // Map variables to the parameters userAccount = new UserAccount( username: dto.UserAccountDto.Username, password: dto.UserAccountDto.Password, isActive: true, isFirstTimeUser: false, roleType: RoleTypes.PUBLIC); securityQuestions = dto.SecurityQuestionDtos .Select(securityQuestionDto => new SecurityQuestion( securityQuestionDto.Question, securityQuestionDto.Answer)) .ToList(); userProfile = new UserProfile( displayPicture: ConfigurationManager.AppSettings["DefaultURLProfileImagePath"], displayName: dto.UserProfileDto.DisplayName); // Hash password and security questions var saltGenerator = new SaltGenerator(); var payloadHasher = new PayloadHasher(); passwordSalt = new PasswordSalt(saltGenerator.GenerateSalt(128)); userAccount.Password = payloadHasher.Sha256HashWithSalt(passwordSalt.Salt, userAccount.Password); securityAnswerSalts = new List <SecurityAnswerSalt>(); for (var i = 0; i < securityQuestions.Count; i++) { securityAnswerSalts.Add(new SecurityAnswerSalt { Salt = saltGenerator.GenerateSalt(128) }); securityQuestions[i].Answer = payloadHasher.Sha256HashWithSalt(securityAnswerSalts[i].Salt, securityQuestions[i].Answer); } return(new ResponseDto <bool>() { Data = true }); }
public void Should_StoreUser_When_ValidModelsArePassedIn() { // Arrange var userAccount = new UserAccount() { Username = "******", Password = "******", IsActive = true, IsFirstTimeUser = false }; var passwordSalt = new PasswordSalt() { Salt = "!@#$%^&*()" }; var claims = new UserClaims() { Claims = new Collection <Claim>() { new Claim("ReadIndividualProfile", "True"), new Claim("UpdateIndividualProfile", "True"), new Claim("ReadPreferences", "True"), new Claim("UpdatePreferences", "True"), new Claim("ReadBillSplitter", "True"), new Claim("ReadMenu", "True"), new Claim("ReadDictionary", "True"), new Claim("UpdateDictionary", "True") } }; var securityQuestions = new List <SecurityQuestion>() { new SecurityQuestion() { Question = 1, Answer = "answer1", }, new SecurityQuestion() { Question = 2, Answer = "answer2", }, new SecurityQuestion() { Question = 3, Answer = "answer3", } }; var securityAnswerSalts = new List <SecurityAnswerSalt>() { new SecurityAnswerSalt() { Salt = "!Q2w#E4r" }, new SecurityAnswerSalt() { Salt = "%T6y&U8i" }, new SecurityAnswerSalt() { Salt = "&U8i(O0p" } }; var userProfile = new UserProfile() { DisplayPicture = "www.img.com", DisplayName = "displayName" }; var userGateway = new UserGateway(); // Act Action act = () => userGateway.StoreIndividualUser(userAccount, passwordSalt, claims, userProfile, securityQuestions, securityAnswerSalts); // Assert act.Should().NotThrow(); }
public CreateFirstTimeSsoUserPostLogicValidationStrategy(UserAccount userAccount, PasswordSalt passwordSalt) { _userAccount = userAccount; _passwordSalt = passwordSalt; }
public ResetPasswordPostLogicValidationStrategy(UserAccount userAccount, PasswordSalt passwordSalt) { _userAccount = userAccount; _passwordSalt = passwordSalt; }
public BusinessUserController(PasswordSalt PassSalt) { _salt = PassSalt.Salt; // Set Salt }
public ResponseDto <ResetPasswordDto> SsoUpdatePassword() { var resetPasswordPreLogicValidationStrategy = new ResetPasswordPreLogicValidationStrategy(_resetPasswordDto, ResetPasswordValidationTypes.UpdatePasswordValidation); var saltGenerator = new SaltGenerator(); var payloadHasher = new PayloadHasher(); UserAccount userAccount; // Validate data transfer object var result = resetPasswordPreLogicValidationStrategy.ExecuteStrategy(); if (result.Error != null) { return(new ResponseDto <ResetPasswordDto> { Data = null, Error = result.Error }); } // Get the existing UserAccount model associated with the username using (var userGateway = new UserGateway()) { var gatewayResult = userGateway.GetUserByUsername(_resetPasswordDto.Username); if (gatewayResult.Error != null) { return(new ResponseDto <ResetPasswordDto>() { Data = null, Error = GeneralErrorMessages.GENERAL_ERROR }); } userAccount = gatewayResult.Data; } // Set the new password to the UserAccount model userAccount.Password = _resetPasswordDto.Password; // Hash password var passwordSalt = new PasswordSalt(saltGenerator.GenerateSalt(128)); userAccount.Password = payloadHasher.Sha256HashWithSalt(passwordSalt.Salt, userAccount.Password); // Update the password in the database using (var userGateway = new UserGateway()) { var gatewayResult = userGateway.UpdatePassword(userAccount, passwordSalt); if (gatewayResult.Error != null) { return(new ResponseDto <ResetPasswordDto>() { Data = null, Error = GeneralErrorMessages.GENERAL_ERROR }); } } return(new ResponseDto <ResetPasswordDto>() { Data = _resetPasswordDto }); }
public User NewUser(Name name, Email email, Password password, PasswordSalt passwordSalt) { return(new(UserId.NewUserId(), name, email, password, passwordSalt)); }
/// <summary> /// /// </summary> /// <param name="dto"></param> /// <param name="userAccount"></param> /// <param name="passwordSalt"></param> /// <param name="userClaims"></param> /// <param name="userProfile"></param> /// <param name="securityQuestions"></param> /// <param name="securityAnswerSalts"></param> /// <returns></returns> private ResponseDto <bool> MapIndividualDtoToModel(RegisterUserDto dto, out UserAccount userAccount, out PasswordSalt passwordSalt, out UserClaims userClaims, out UserProfile userProfile, out IList <SecurityQuestion> securityQuestions, out IList <SecurityAnswerSalt> securityAnswerSalts) { var mappingResult = MapUserDtoToModel(dto, out userAccount, out passwordSalt, out userProfile, out securityQuestions, out securityAnswerSalts); // If mapping failed, return early. if (!mappingResult.Data) { userClaims = null; return(mappingResult); } // Set user claims to be stored in UserClaims table var claimsFactory = new ClaimsFactory(); userClaims = new UserClaims(claimsFactory.Create(AccountTypes.Individual)); return(new ResponseDto <bool>() { Data = true }); }
/// <summary> /// The StoreIndividualUser method. /// Contains logic for saving an individual user into the database. /// <para> /// @author: Jennifer Nguyen /// @updated: 03/13/2018 /// </para> /// </summary> /// <param name="userAccount"></param> /// <param name="passwordSalt"></param> /// <param name="securityQuestions"></param> /// <param name="securityAnswerSalts"></param> /// <param name="claims"></param> /// <param name="userProfile"></param> /// <returns>ResponseDto with bool data</returns> public ResponseDto <bool> StoreIndividualUser(UserAccount userAccount, PasswordSalt passwordSalt, UserClaims userClaims, UserProfile userProfile, IList <SecurityQuestion> securityQuestions, IList <SecurityAnswerSalt> securityAnswerSalts) { using (var dbContextTransaction = context.Database.BeginTransaction()) { try { // Add UserAccount context.UserAccounts.AddOrUpdate(userAccount); context.SaveChanges(); // Get Id from UserAccount var userId = (from account in context.UserAccounts where account.Username == userAccount.Username select account.Id).SingleOrDefault(); // Set UserId to dependencies passwordSalt.Id = userId; userClaims.Id = userId; userProfile.Id = userId; // Add SecurityQuestions foreach (var securityQuestion in securityQuestions) { securityQuestion.UserId = userId; context.SecurityQuestions.Add(securityQuestion); context.SaveChanges(); } // Get SecurityQuestions in database var updatedSecurityQuestions = (from question in context.SecurityQuestions where question.UserId == userId select question).ToList(); // Add SecurityAnswerSalts for (var i = 0; i < securityQuestions.Count; i++) { // Get SecurityQuestionId for each securityAnswerSalt var securityQuestionId = (from query in updatedSecurityQuestions where query.Question == securityQuestions[i].Question select query.Id).SingleOrDefault(); // Set SecurityQuestionId for SecurityAnswerSalt securityAnswerSalts[i].Id = securityQuestionId; // Add SecurityAnswerSalt context.SecurityAnswerSalts.Add(securityAnswerSalts[i]); context.SaveChanges(); } // Add PasswordSalt context.PasswordSalts.AddOrUpdate(passwordSalt); // Add UserClaims context.UserClaims.Add(userClaims); // Add UserProfile context.UserProfiles.Add(userProfile); context.SaveChanges(); // Commit transaction to database dbContextTransaction.Commit(); // Return a true ResponseDto return(new ResponseDto <bool>() { Data = true }); } catch (Exception) { // Rolls back the changes saved in the transaction dbContextTransaction.Rollback(); // Returns a false ResponseDto return(new ResponseDto <bool>() { Data = false, Error = GeneralErrorMessages.GENERAL_ERROR }); } } }
/// <summary> /// The StoreRestaurantUser method. /// Contains logic to store a restaurant user to the database. /// <para> /// @author: Jennifer Nguyen /// @updated: 03/13/2018 /// </para> /// </summary> /// <param name="userAccount"></param> /// <param name="passwordSalt"></param> /// <param name="securityQuestions"></param> /// <param name="securityAnswerSalts"></param> /// <param name="claims"></param> /// <param name="userProfile"></param> /// <param name="restaurantProfile"></param> /// <param name="businessHours"></param> /// <param name="foodPreferences"></param> /// <returns>ResponseDto with bool data</returns> public ResponseDto <bool> StoreRestaurantUser(UserAccount userAccount, PasswordSalt passwordSalt, UserClaims userClaims, UserProfile userProfile, RestaurantProfile restaurantProfile, IList <SecurityQuestion> securityQuestions, IList <SecurityAnswerSalt> securityAnswerSalts, IList <FoodPreference> foodPreferences, IList <BusinessHour> businessHours) { using (var dbContextTransaction = context.Database.BeginTransaction()) { try { // Add UserAccount context.UserAccounts.AddOrUpdate(userAccount); context.SaveChanges(); // Get Id from UserAccount var userId = (from account in context.UserAccounts where account.Username == userAccount.Username select account.Id).SingleOrDefault(); // Set UserId to dependencies passwordSalt.Id = userId; userClaims.Id = userId; userProfile.Id = userId; restaurantProfile.Id = userId; // Add FoodPreferences foreach (var foodPreference in foodPreferences) { foodPreference.UserId = userId; context.FoodPreferences.Add(foodPreference); context.SaveChanges(); } // Add SecurityQuestions foreach (var securityQuestion in securityQuestions) { securityQuestion.UserId = userId; context.SecurityQuestions.Add(securityQuestion); context.SaveChanges(); } // Get SecurityQuestions in database var queryable = (from question in context.SecurityQuestions where question.UserId == userId select question).ToList(); // Add SecurityAnswerSalts for (var i = 0; i < securityQuestions.Count; i++) { // Get SecurityQuestionId for each securityAnswerSalt var securityQuestionId = (from query in queryable where query.Question == securityQuestions[i].Question select query.Id).SingleOrDefault(); // Set SecurityQuestionId for SecurityAnswerSalt securityAnswerSalts[i].Id = securityQuestionId; // Add SecurityAnswerSalt context.SecurityAnswerSalts.Add(securityAnswerSalts[i]); context.SaveChanges(); } // Add PasswordSalt context.PasswordSalts.AddOrUpdate(passwordSalt); // Add UserClaims context.UserClaims.Add(userClaims); // Add UserProfile context.UserProfiles.Add(userProfile); // Add RestaurantProfile context.RestaurantProfiles.Add(restaurantProfile); context.SaveChanges(); // Add BusinessHours foreach (var businessHour in businessHours) { businessHour.RestaurantId = userId; context.BusinessHours.Add(businessHour); context.SaveChanges(); } // Add First Menu // Find the corresponding profile var dbRestaurantProfile = (from profile in context.RestaurantProfiles where profile.Id == userId select profile).SingleOrDefault(); var newMenu = new RestaurantMenu("Your First Menu", false, 0); newMenu.RestaurantProfile = dbRestaurantProfile; context.RestaurantMenus.Add(newMenu); context.Entry(dbRestaurantProfile).State = System.Data.Entity.EntityState.Unchanged; context.SaveChanges(); // Add First Menu Item // Find the corresponding menu var dbRestaurantMenu = (from menu in context.RestaurantMenus where menu.RestaurantId == restaurantProfile.Id select menu).SingleOrDefault(); var newMenuItem = new RestaurantMenuItem(itemName: "Your First Menu Item", itemPrice: 0, itemPicture: ConfigurationManager.AppSettings["DefaultURLMenuItemPath"], tag: "tag", description: "", isActive: false, flag: 0); newMenuItem.RestaurantMenu = dbRestaurantMenu; context.RestaurantMenuItems.Add(newMenuItem); context.Entry(dbRestaurantMenu).State = System.Data.Entity.EntityState.Unchanged; context.SaveChanges(); // Commit transaction to database dbContextTransaction.Commit(); // Return a true ResponseDto return(new ResponseDto <bool>() { Data = true }); } catch (Exception) { // Rolls back the changes saved in the transaction dbContextTransaction.Rollback(); // Return a false ResponseDto return(new ResponseDto <bool>() { Data = false, Error = GeneralErrorMessages.GENERAL_ERROR }); } } }
/// <summary> /// The CreateAdmin method. /// Contains business logic to create an admin user. /// <para> /// @author: Jennifer Nguyen, Angelica Salas /// @updated: 04/26/2018 /// </para> /// </summary> /// <param name="registerUserDto"></param> /// <returns>ResponseDto</returns> public ResponseDto <RegisterUserDto> CreateAdmin(RegisterUserDto registerUserDto) { var createIndividualPreLogicValidationStrategy = new CreateIndividualPreLogicValidationStrategy(registerUserDto); var securityAnswerSalts = new List <SecurityAnswerSalt>(); var saltGenerator = new SaltGenerator(); var payloadHasher = new PayloadHasher(); var claimsFactory = new ClaimsFactory(); // Validate data transfer object var result = createIndividualPreLogicValidationStrategy.ExecuteStrategy(); if (result.Error != null) { return(new ResponseDto <RegisterUserDto> { Data = registerUserDto, Error = result.Error }); } // Map data transfer object to domain models var userAccount = new UserAccount(username: registerUserDto.UserAccountDto.Username, password: registerUserDto.UserAccountDto.Password, isActive: true, isFirstTimeUser: false, roleType: "private"); var securityQuestions = registerUserDto.SecurityQuestionDtos .Select(securityQuestionDto => new SecurityQuestion( securityQuestionDto.Question, securityQuestionDto.Answer)) .ToList(); //Admin User Profile var displayImagePath = ConfigurationManager.AppSettings["DefaultURLProfileImagePath"]; var userProfile = new UserProfile(displayPicture: displayImagePath, displayName: registerUserDto.UserProfileDto.DisplayName); // Set user claims to be stored in UserClaims table as administrator var userClaims = new UserClaims(claimsFactory.Create(AccountTypes.Admin)); // Hash password var passwordSalt = new PasswordSalt(saltGenerator.GenerateSalt(128)); userAccount.Password = payloadHasher.Sha256HashWithSalt(passwordSalt.Salt, userAccount.Password); // Hash security answers for (var i = 0; i < securityQuestions.Count; i++) { securityAnswerSalts.Add(new SecurityAnswerSalt { Salt = saltGenerator.GenerateSalt(128) }); securityQuestions[i].Answer = payloadHasher.Sha256HashWithSalt(securityAnswerSalts[i].Salt, securityQuestions[i].Answer); } var createIndividualPostLogicValdiationStrategy = new CreateIndividualPostLogicValidationStrategy(userAccount, passwordSalt, userClaims, userProfile, securityQuestions, securityAnswerSalts); var validateResult = createIndividualPostLogicValdiationStrategy.ExecuteStrategy(); if (!validateResult.Data) { return(new ResponseDto <RegisterUserDto> { Data = registerUserDto, Error = GeneralErrorMessages.GENERAL_ERROR }); } // Store user in database using (var userGateway = new UserGateway()) { var gatewayResult = userGateway.StoreIndividualUser(userAccount, passwordSalt, userClaims, userProfile, securityQuestions, securityAnswerSalts); if (gatewayResult.Data == false) { return(new ResponseDto <RegisterUserDto>() { Data = registerUserDto, Error = GeneralErrorMessages.GENERAL_ERROR }); } } return(new ResponseDto <RegisterUserDto> { Data = registerUserDto }); }
/// <summary> /// Instantiate domain model equivalent of Dto's /// <para> /// @author: Brian Fann /// @updated: 4/25/18 /// </para> /// </summary> /// <param name="dto">Dto to map</param> /// <param name="param">Parameter Object to map to</param> /// <returns></returns> private ResponseDto <bool> MapRestaurantDtoToModels(RegisterRestaurantDto dto, out UserAccount userAccount, out PasswordSalt passwordSalt, out UserClaims userClaims, out UserProfile userProfile, out IList <SecurityQuestion> securityQuestions, out IList <SecurityAnswerSalt> securityAnswerSalts, out RestaurantProfile restaurantProfile, out IList <BusinessHour> businessHours, out IList <FoodPreference> foodPreferences) { // Try to map user dto var mappingResult = MapUserDtoToModel(dto, out userAccount, out passwordSalt, out userProfile, out securityQuestions, out securityAnswerSalts); if (!mappingResult.Data) { restaurantProfile = null; foodPreferences = null; businessHours = null; userClaims = null; return(mappingResult); } restaurantProfile = new RestaurantProfile( phoneNumber: dto.RestaurantProfileDto.PhoneNumber, address: dto.RestaurantProfileDto.Address, details: dto.RestaurantProfileDto.Details); // Call GeocodeService to get geocoordinates of the restaurant var geocodeService = new GoogleGeocodeService(); var geocodeResponse = geocodeService.Geocode(restaurantProfile.Address); var dateTimeService = new DateTimeService(); businessHours = dto.BusinessHourDtos .Select(businessHourDto => new BusinessHour( timeZone: dto.TimeZone, day: businessHourDto.Day, openTime: dateTimeService.ConvertLocalMeanTimeToUtc(dateTimeService.ConvertTimeToDateTimeUnspecifiedKind(businessHourDto.OpenTime), dto.TimeZone), closeTime: dateTimeService.ConvertLocalMeanTimeToUtc(dateTimeService.ConvertTimeToDateTimeUnspecifiedKind(businessHourDto.CloseTime), dto.TimeZone))) .ToList(); foodPreferences = new List <FoodPreference>(); if (dto.FoodPreferences != null) { foodPreferences = dto.FoodPreferences.Select(foodPreference => new FoodPreference(foodPreference)).ToList(); } // Set user claims to be stored in UserClaims table var claimsFactory = new ClaimsFactory(); userClaims = new UserClaims(claimsFactory.Create(AccountTypes.Restaurant)); if (geocodeResponse.Error != null) { return(new ResponseDto <bool> { Data = false, Error = geocodeResponse.Error }); } restaurantProfile.GeoCoordinates = new GeoCoordinates(latitude: geocodeResponse.Data.Latitude, longitude: geocodeResponse.Data.Longitude); // Successful response return(new ResponseDto <bool>() { Data = true }); }