public ActionResult Index(InvitationAcceptanceCommand command) { try { var invitation = _session .Include<Invitation>(x => x.VouchedBy) .Load<Invitation>(Invitation.FormatId(command.Token)); invitation.Accept(); var voucher = _session.Load<Member>(invitation.VouchedBy); voucher.RemoveInvite(invitation.Id); var member = new Member { Email = invitation.Email, FullName = invitation.FullName, UserName = command.UserName, LinkedIn = invitation.LinkedIn, GitHub = invitation.GitHub, }; member.SetLineage(voucher.Id, voucher.Lineage); member.SetPassword(command.Password); _session.Store(member); var email = Identifier.FromEmail(invitation.Email, member.Id); member.AddIdentifier(email.Id); _session.Store(email); var username = Identifier.FromUserName(command.UserName, member.Id); member.AddIdentifier(username.Id); _session.Store(username); _session.Advanced.UseOptimisticConcurrency = true; _session.SaveChanges(); _authentication.Login(member.Id); _email.SendAcceptanceNotificationToGroup(member); return RedirectToAction("Index", "Welcome"); } catch (ConcurrencyException) { command.UserNameIsAvailable = false; } catch (ApplicationException e) { ModelState.AddModelError("", e.Message); } return View(command); }
public ActionResult Index(string token) { var model = new InvitationAcceptanceCommand(); model.Token = token; var invitation = _session.Load<Invitation>(Invitation.FormatId(model.Token)); //TODO: check valid model.UserName = invitation.FullName.Trim().Replace(" ", ".").ToLower(); model.UserNameIsAvailable = !_session.Advanced.DocumentExists(Identifier.FormatIdFromUserName(model.UserName)); return View(model); }