public ActionResult Register(RegistrationViewModel registrationViewModel) { return RegisterInternal(registrationViewModel, "Sorry, that email address has already been registered.", createUser: (pwd) => new Parent(registrationViewModel.Name, registrationViewModel.Email, pwd).Initialise(), confirmAction: () => RedirectToAction("Confirm"), invalidModelStateAction: () => View("Register", registrationViewModel) ); }
ActionResult RegisterInternal( RegistrationViewModel registrationViewModel, string usernameTakenMessage, Func<string, User> createUser, Func<ActionResult> confirmAction, Func<ActionResult> invalidModelStateAction, Action<User> afterUserCreated = null) { if (registrationViewModel == null) { throw new ArgumentNullException("registrationViewModel"); } if (createUser == null) { throw new ArgumentNullException("createUser"); } if (confirmAction == null) { throw new ArgumentNullException("confirmAction"); } if (invalidModelStateAction == null) { throw new ArgumentNullException("invalidModelStateAction"); } if (ModelState.IsValid) { var conflictedUser = userService.GetUserByUserName(registrationViewModel.Email); if (conflictedUser != null) { ModelState.AddModelError("Email", usernameTakenMessage); return invalidModelStateAction(); } var hashedPassword = formsAuthenticationService.HashAndSalt( registrationViewModel.Email, registrationViewModel.Password); var user = createUser(hashedPassword); userService.SaveUser(user); if (afterUserCreated != null) { afterUserCreated(user); } return confirmAction(); } return invalidModelStateAction(); }
public ActionResult AddChild(RegistrationViewModel registrationViewModel) { var parent = userService.CurrentUser as Parent; if(parent == null) { //throw new TardisBankException("You must be a parent in order to register a Child"); return StatusCode.NotFound; } return RegisterInternal(registrationViewModel, "Sorry, that user name has already been taken", createUser: (pwd) => parent.CreateChild(registrationViewModel.Name, registrationViewModel.Email, pwd), confirmAction: () => RedirectToAction("Index", "Child"), invalidModelStateAction: () => View("AddChild", registrationViewModel) ); }