public async Task <ActionResult> Accept(string id)
        {
            try
            {
                var query      = new GetInvitationByKey(id);
                var invitation = await _queryBus.QueryAsync(query);

                if (invitation == null)
                {
                    return(View("InvitationNotFound"));
                }

                var model = new AcceptViewModel
                {
                    InvitationKey = id,
                    Email         = invitation.EmailAddress
                };

                return(View(model));
            }
            catch (Exception exception)
            {
                ModelState.AddModelError("", exception);
                _logger.Error("Failed ot launch", exception);
                return(View(new AcceptViewModel()));
            }
        }
        public async Task <ActionResult> Accept(AcceptViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var query      = new GetInvitationByKey(model.InvitationKey);
            var invitation = await _queryBus.QueryAsync(query);

            if (invitation == null)
            {
                return(View("InvitationNotFound"));
            }

            var cmd = new AcceptInvitation(model.UserName, model.Password, model.InvitationKey)
            {
                AcceptedEmail = model.Email,
                FirstName     = model.FirstName,
                LastName      = model.LastName
            };

            var reply = await _requestReplyBus.ExecuteAsync(cmd);

            if (reply == null)
            {
                ModelState.AddModelError("",
                                         "Failed to find an invitation with the specified key. You might have already accepted the invitation? If not, ask for a new one.");
                _logger.Error("Failed to find invitation " + model.InvitationKey);
                return(View(new AcceptViewModel()));
            }

            var getApps = new GetApplicationList {
                AccountId = reply.AccountId
            };
            var apps = await _queryBus.QueryAsync(getApps);


            var identity = CreateIdentity(reply.AccountId, reply.UserName, false, apps);

            SignIn(identity);
            return(Redirect("~/#/account/accepted"));
        }