public ActionResult SignUp(RequiredInfoViewModel requiredInfoViewModel) { if (!ModelState.IsValid) { return View(requiredInfoViewModel); } var subDomain = GetSubDomainFromCharityName(requiredInfoViewModel.CharityName); var activationToken = TokenHelper.CreateRandomIdentifier(); var registrationInfo = new RegistrationInfo(); Mapper.DynamicMap(requiredInfoViewModel, registrationInfo); var result = _charityMembershipService.RegisterUserAndCharity(registrationInfo); if (result) { var emailViewModel = new EmailViewModel { To = requiredInfoViewModel.UserIdentifier, ActivationToken = activationToken.AsQueryString() }; signUpQueueingService.QueueEmail(emailViewModel); signUpQueueingService.QueueProvisioning(); TempData["SubDomain"] = subDomain; return RedirectToAction("Complete"); } ModelState.AddModelError("", "User and Charity registration failed. Please contact support."); return View(); }
public bool RegisterUserAndCharity(RegistrationInfo registrationInfo) { bool result = false; var charity = new Charity { Name = registrationInfo.CharityName, RegisteredCharityNumber = registrationInfo.CharityName, SubDomain = registrationInfo.SubDomain }; using (var scope = new TransactionScope()) { var newCharity = CharitiesDataAccess.Insert(charity); if (newCharity == null) throw new ArgumentNullException("newCharity"); // Attempt to register the user MembershipCreateStatus createStatus; Membership.CreateUser(registrationInfo.UserIdentifier, registrationInfo.Password, registrationInfo.UserIdentifier, null, null, true, null, out createStatus); var user = Membership.GetUser(registrationInfo.UserIdentifier); if (user == null) throw new ArgumentNullException("user"); var charityMembership = new CharityMembership { CharityId = newCharity.Id, UserName = user.UserName }; var newCharityMembership = CharitiesMembershipsDataAccess.Insert(charityMembership); if (createStatus == MembershipCreateStatus.Success && newCharityMembership != null) { result = true; scope.Complete(); } } return result; }