public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { int questionId; if (_unitOfWork.SecurityQuestionsRepository.All().Any(x => x.Text == passwordQuestion)) { var securityQuestion = _unitOfWork.SecurityQuestionsRepository.All().Single(x => x.Text == passwordQuestion); questionId = securityQuestion.Id; } else { var newQuestion = new SecurityQuestion { Text = passwordQuestion }; _unitOfWork.SecurityQuestionsRepository.Add(newQuestion); _unitOfWork.Commit(); questionId = newQuestion.Id; } var defaultRoleId = _unitOfWork.RoleRepository.All().Where(x => x.Name == "Default" && x.SystemDefault).Select(x => x.Id).Single(); var user = new User { UserDetail = new UserDetail { Username = username, Email = email }, UserActivity = new UserActivity { CreatedDate = DateTime.Now, IsApproved = isApproved, IsLockedOut = false, LastActiveDate = DateTime.Now }, UserAndPassword = new UserAndPassword { Password = GetPasswordToStore(password), LastChanged = DateTime.Now }, UserSecurityQuestionAndAnswer = new UserSecurityQuestionAndAnswer { Answer = passwordAnswer, QuestionId = questionId } }; user.UserToRoles.Add(new UserToRole() { RoleId = defaultRoleId }); _unitOfWork.UserRepository.Add(user); _unitOfWork.Commit(); status = MembershipCreateStatus.Success; return(GetMembershipUserFromUser(user)); }
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer) { var isValid = ValidateUser(username, password); if (!isValid) { return(false); } int questionId; if (_unitOfWork.SecurityQuestionsRepository.All().Any(x => x.Text == newPasswordQuestion)) { var securityQuestion = _unitOfWork.SecurityQuestionsRepository.All().Single(x => x.Text == newPasswordQuestion); questionId = securityQuestion.Id; } else { var newQuestion = new SecurityQuestion { Text = newPasswordQuestion }; _unitOfWork.SecurityQuestionsRepository.Add(newQuestion); _unitOfWork.Commit(); questionId = newQuestion.Id; } var userMembership = GetUser(username, false); if (userMembership?.ProviderUserKey == null) { return(false); } var userId = (int)userMembership.ProviderUserKey; var user = _unitOfWork.UserRepository.All().Single(x => x.Id == userId); user.UserSecurityQuestionAndAnswer.QuestionId = questionId; user.UserSecurityQuestionAndAnswer.Answer = newPasswordAnswer; _unitOfWork.Commit(); return(true); }