public async Task <ActionResult> HandleEmailChanged(bool userCancelled = false)
        {
            if (!userCancelled)
            {
                var flashMessage = new FlashMessageViewModel
                {
                    Severity = FlashMessageSeverityLevel.Success,
                    Headline = "You've changed your email"
                };
                AddFlashMessageToCookie(flashMessage);

                await OwinWrapper.UpdateClaims();

                var userRef   = OwinWrapper.GetClaimValue(ControllerConstants.UserRefClaimKeyName);
                var email     = OwinWrapper.GetClaimValue(ControllerConstants.EmailClaimKeyName);
                var firstName = OwinWrapper.GetClaimValue(DasClaimTypes.GivenName);
                var lastName  = OwinWrapper.GetClaimValue(DasClaimTypes.FamilyName);

                await _homeOrchestrator.SaveUpdatedIdentityAttributes(userRef, email, firstName, lastName);
            }
            return(RedirectToAction(ControllerConstants.IndexActionName));
        }
        public async Task <ActionResult> Index()
        {
            var userId = OwinWrapper.GetClaimValue(ControllerConstants.UserRefClaimKeyName);

            OrchestratorResponse <UserAccountsViewModel> accounts;

            if (!string.IsNullOrWhiteSpace(userId))
            {
                await OwinWrapper.UpdateClaims();

                var partialLogin = OwinWrapper.GetClaimValue(DasClaimTypes.RequiresVerification);

                if (partialLogin.Equals("true", StringComparison.CurrentCultureIgnoreCase))
                {
                    return(Redirect(ConfigurationFactory.Current.Get().AccountActivationUrl));
                }

                var userRef   = OwinWrapper.GetClaimValue(ControllerConstants.UserRefClaimKeyName);
                var email     = OwinWrapper.GetClaimValue(ControllerConstants.EmailClaimKeyName);
                var firstName = OwinWrapper.GetClaimValue(DasClaimTypes.GivenName);
                var lastName  = OwinWrapper.GetClaimValue(DasClaimTypes.FamilyName);

                await _homeOrchestrator.SaveUpdatedIdentityAttributes(userRef, email, firstName, lastName);

                accounts = await _homeOrchestrator.GetUserAccounts(userId);
            }
            else
            {
                var model = new
                {
                    HideHeaderSignInLink = true
                };

                return(View(ControllerConstants.ServiceStartPageViewName, model));
            }

            if (accounts.Data.Invitations > 0)
            {
                return(RedirectToAction(ControllerConstants.InvitationIndexName, ControllerConstants.InvitationControllerName));
            }

            if (accounts.Data.Accounts.AccountList.Count == 1)
            {
                var account = accounts.Data.Accounts.AccountList.FirstOrDefault();

                if (account != null)
                {
                    return(RedirectToAction(ControllerConstants.IndexActionName, ControllerConstants.EmployerTeamControllerName, new { HashedAccountId = account.HashedId }));
                }
            }

            var flashMessage = GetFlashMessageViewModelFromCookie();

            if (flashMessage != null)
            {
                accounts.FlashMessage = flashMessage;
            }

            if (accounts.Data.Accounts.AccountList.Count > 1)
            {
                return(View(accounts));
            }

            return(RedirectToAction(ControllerConstants.GetApprenticeshipFundingActionName, ControllerConstants.EmployerAccountControllerName));
        }