public ActionResult SignOutCallback(bool timeout)
        {
            if (Request.IsAuthenticated)
            {
                // Redirect to home page if the user is authenticated.
                return(RedirectToRoute(RecruitmentRouteNames.LandingPage));
            }

            _authorizationDataProvider.Clear(HttpContext);

            if (timeout)
            {
                SetUserMessage(AuthorizeMessages.SignedOutTimeout, UserMessageLevel.Info);
            }
            else
            {
                SetUserMessage(AuthorizeMessages.SignedOut, UserMessageLevel.Info);
            }

            return(RedirectToRoute(RecruitmentRouteNames.LandingPage));
        }
Пример #2
0
        public ActionResult Authorize()
        {
            //TODO: ACS Calls this action during signout. Need to suppress it in a cleaner manner
            if (!Request.IsAuthenticated)
            {
                return(null);
            }

            var claimsPrincipal = (ClaimsPrincipal)User;
            var response        = _providerUserMediator.Authorize(claimsPrincipal);
            var message         = response.Message;
            var viewModel       = response.ViewModel;

            //Clear existing claims
            _cookieAuthorizationDataProvider.Clear(HttpContext);

            //Add domain claims
            if (viewModel.EmailAddress != null)
            {
                AddClaim(SystemClaimTypes.Email, viewModel.EmailAddress, viewModel);
            }

            if (viewModel.EmailAddressVerified)
            {
                AddClaim(SystemClaimTypes.Role, Roles.VerifiedEmail, viewModel);
            }

            if (message != null)
            {
                SetUserMessage(message.Text, message.Level);
            }

            switch (response.Code)
            {
            case ProviderUserMediatorCodes.Authorize.EmptyUsername:
            case ProviderUserMediatorCodes.Authorize.MissingProviderIdentifier:
            case ProviderUserMediatorCodes.Authorize.MissingServicePermission:
                _cookieAuthorizationDataProvider.Clear(HttpContext);

                return(RedirectToRoute(RecruitmentRouteNames.SignOut, new
                {
                    returnRoute = RecruitmentRouteNames.LandingPage
                }));

            case ProviderUserMediatorCodes.Authorize.NoProviderProfile:
            case ProviderUserMediatorCodes.Authorize.FailedMinimumSitesCountCheck:
            case ProviderUserMediatorCodes.Authorize.FirstUser:
                return(RedirectToRoute(RecruitmentRouteNames.ManageProviderSites));

            case ProviderUserMediatorCodes.Authorize.NoUserProfile:
                return(RedirectToRoute(RecruitmentRouteNames.Settings));

            case ProviderUserMediatorCodes.Authorize.EmailAddressNotVerified:
                return(RedirectToRoute(RecruitmentRouteNames.VerifyEmail));

            case ProviderUserMediatorCodes.Authorize.Ok:
                var returnUrl = UserData.Pop(UserDataItemNames.ReturnUrl);

                if (returnUrl.IsValidReturnUrl())
                {
                    var decodedUrl = Server.UrlDecode(returnUrl);
                    if (decodedUrl != null)
                    {
                        decodedUrl = decodedUrl.Replace("&", "&");
                        return(Redirect(decodedUrl.Replace("&", "&")));
                    }
                }

                return(RedirectToRoute(RecruitmentRouteNames.RecruitmentHome));

            case ProviderUserMediatorCodes.Authorize.ProviderNotMigrated:
                return(RedirectToRoute(RecruitmentRouteNames.OnBoardingComplete));

            default:
                throw new InvalidMediatorCodeException(response.Code);
            }
        }