// Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. using IdentityServer4.Services; using IdentityServer4.Stores; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Threading.Tasks; namespace IdentityServer4.Quickstart.UI { /// /// This controller processes the consent UI /// [SecurityHeaders] public class ConsentController : Controller { private readonly ConsentService _consent; public ConsentController( IIdentityServerInteractionService interaction, IClientStore clientStore, IResourceStore resourceStore, ILogger logger) { _consent = new ConsentService(interaction, clientStore, resourceStore, logger); } /// /// Shows the consent screen /// /// /// [HttpGet] public async Task Index(string returnUrl) { var vm = await _consent.BuildViewModelAsync(returnUrl); if (vm != null) { return View("Index", vm); } return View("Error"); } /// /// Handles the consent screen postback /// [HttpPost] [ValidateAntiForgeryToken] public async Task Index(ConsentInputModel model) { var result = await _consent.ProcessConsent(model); if (result.IsRedirect) { return Redirect(result.RedirectUri); } if (result.HasValidationError) { ModelState.AddModelError("", result.ValidationError); } if (result.ShowView) { return View("Index", result.ViewModel); } return View("Error"); } } }