Exemplo n.º 1
0
        public override Task <Stream> AuthorizeResponse(AuthorizeResponseViewModel model)
        {
            var controller = GetController <LoginController>();
            var result     = RenderAuthorizeResponseAction(controller, model);

            return(Task.FromResult(result));
        }
        /// <summary>
        /// Loads the HTML for the authorize response page.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns>
        /// Stream for the HTML
        /// </returns>
        public virtual async Task <Stream> AuthorizeResponse(AuthorizeResponseViewModel model)
        {
            var newModel = new CommonViewModel
            {
                SiteName = model.SiteName,
                SiteUrl  = model.SiteUrl,
                Custom   = model.Custom
            };

            var scripts = new List <string>();

            scripts.AddRange(config.Scripts ?? Enumerable.Empty <string>());
            scripts.Add("~/assets/app.FormPostResponse.js");

            var data = BuildModelDictionary(newModel, AuthorizeResponseView, config.Stylesheets, scripts);

            data.Add("responseUri", model.ResponseFormUri);
            data.Add("responseFields", model.ResponseFormFields);

            string html = await LoadHtmlTemplate(AuthorizeResponseView);

            html = FormatHtmlTemplate(html, data);

            return(html.ToStream());
        }
Exemplo n.º 3
0
        public override async Task <HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken)
        {
            _request.SetSuppressXfo();

            Logger.Info("Posting to " + _response.RedirectUri);

            // see if we have a DefaultViewService for the IViewService
            // to allow for customization of the authorize response page
            var ctx            = _request.GetOwinContext();
            var defaultViewSvc = ctx.ResolveDependency <IViewService>() as DefaultViewService;

            if (defaultViewSvc != null)
            {
                Logger.Debug("Using DefaultViewService to render authorization response HTML");

                var vm = new AuthorizeResponseViewModel
                {
                    SiteName           = _response.Request.Options.SiteName,
                    SiteUrl            = _request.GetIdentityServerBaseUrl(),
                    ResponseFormUri    = _response.RedirectUri,
                    ResponseFormFields = _response.ToNameValueCollection().ToFormPost()
                };

                var result = new HtmlStreamActionResult(() => defaultViewSvc.AuthorizeResponse(vm));
                return(await result.ExecuteAsync(cancellationToken));
            }

            Logger.Debug("Using AssetManager to render authorization response HTML");
            return(await base.ExecuteAsync(cancellationToken));
        }
Exemplo n.º 4
0
 public ActionResult AuthorizeResponse(AuthorizeResponseViewModel model)
 {
     // Try and stop direct access - probably a better way to do this
     if (model == null || string.IsNullOrEmpty(model.ResponseFormFields))
     {
         return(HttpNotFound());
     }
     return(View(model));
 }
Exemplo n.º 5
0
        private Stream RenderAuthorizeResponseAction(LoginController controller, AuthorizeResponseViewModel model)
        {
            using (var outputWriter = new StringWriter())
            {
                controller.ControllerContext.RequestContext.HttpContext.Response.Output = outputWriter;
                controller.ControllerContext.RouteData.Values.Add("action", "AuthorizeResponse");
                controller.ControllerContext.RouteData.Values["model"] = model;

                var viewResult = controller.AuthorizeResponse(model);
                viewResult.ExecuteResult(controller.ControllerContext);

                outputWriter.Flush();
                var content = outputWriter.ToString();

                return(new MemoryStream(Encoding.UTF8.GetBytes(content)));
            }
        }
Exemplo n.º 6
0
        private void AddClaim(string type, string value, AuthorizeResponseViewModel viewModel)
        {
            var claim = new Claim(type, value);

            _cookieAuthorizationDataProvider.AddClaim(claim, HttpContext, viewModel.Username);
        }
Exemplo n.º 7
0
        public MediatorResponse <AuthorizeResponseViewModel> Authorize(ClaimsPrincipal principal)
        {
            var viewModel = new AuthorizeResponseViewModel();

            if (string.IsNullOrEmpty(principal?.Identity?.Name))
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.EmptyUsername, viewModel, AuthorizeMessages.EmptyUsername, UserMessageLevel.Error));
            }

            var username = principal.Identity.Name;

            viewModel.Username = username;

            var userProfile = _providerUserProvider.GetUserProfileViewModel(username);

            if (userProfile != null)
            {
                viewModel.EmailAddress         = userProfile.EmailAddress;
                viewModel.EmailAddressVerified = userProfile.EmailAddressVerified;
            }

            var ukprn = principal.GetUkprn();

            if (string.IsNullOrWhiteSpace(ukprn))
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.MissingProviderIdentifier, viewModel, AuthorizeMessages.MissingProviderIdentifier, UserMessageLevel.Error));
            }

            if (!principal.IsInRole(Roles.Faa))
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.MissingServicePermission, viewModel, AuthorizeMessages.MissingServicePermission, UserMessageLevel.Warning));
            }

            var provider = _providerProvider.GetProviderViewModel(ukprn);

            if (provider == null)
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.NoProviderProfile, viewModel, AuthorizeMessages.NoProviderProfile, UserMessageLevel.Info));
            }

            viewModel.ProviderId = provider.ProviderId;

            if (provider.ProviderSiteViewModels.Count() < MinProviderSites)
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.FailedMinimumSitesCountCheck, viewModel, AuthorizeMessages.FailedMinimumSitesCountCheck, UserMessageLevel.Warning));
            }

            if (userProfile == null)
            {
                var isFirstUser = !_providerUserProvider.GetProviderUsers(ukprn).Any();

                if (isFirstUser)
                {
                    return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.FirstUser, viewModel, AuthorizeMessages.FirstUser, UserMessageLevel.Info));
                }

                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.NoUserProfile, viewModel, AuthorizeMessages.NoUserProfile, UserMessageLevel.Info));
            }

            if (!userProfile.EmailAddressVerified)
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.EmailAddressNotVerified, viewModel,
                                           AuthorizeMessages.EmailAddressNotVerified, UserMessageLevel.Info));
            }

            if (!provider.IsMigrated)
            {
                return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.ProviderNotMigrated, viewModel));
            }

            return(GetMediatorResponse(ProviderUserMediatorCodes.Authorize.Ok, viewModel));
        }