97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
| // 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.Events;
 | |
| using IdentityServer4.Extensions;
 | |
| using IdentityServer4.Services;
 | |
| using IdentityServer4.Stores;
 | |
| using Microsoft.AspNetCore.Authorization;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Threading.Tasks;
 | |
| 
 | |
| namespace IdentityServerHost.Quickstart.UI
 | |
| {
 | |
|     /// <summary>
 | |
|     /// This sample controller allows a user to revoke grants given to clients
 | |
|     /// </summary>
 | |
|     [SecurityHeaders]
 | |
|     [Authorize]
 | |
|     public class GrantsController : Controller
 | |
|     {
 | |
|         private readonly IIdentityServerInteractionService _interaction;
 | |
|         private readonly IClientStore _clients;
 | |
|         private readonly IResourceStore _resources;
 | |
|         private readonly IEventService _events;
 | |
| 
 | |
|         public GrantsController(IIdentityServerInteractionService interaction,
 | |
|             IClientStore clients,
 | |
|             IResourceStore resources,
 | |
|             IEventService events)
 | |
|         {
 | |
|             _interaction = interaction;
 | |
|             _clients = clients;
 | |
|             _resources = resources;
 | |
|             _events = events;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Show list of grants
 | |
|         /// </summary>
 | |
|         [HttpGet]
 | |
|         public async Task<IActionResult> Index()
 | |
|         {
 | |
|             return View("Index", await BuildViewModelAsync());
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Handle postback to revoke a client
 | |
|         /// </summary>
 | |
|         [HttpPost]
 | |
|         [ValidateAntiForgeryToken]
 | |
|         public async Task<IActionResult> Revoke(string clientId)
 | |
|         {
 | |
|             await _interaction.RevokeUserConsentAsync(clientId);
 | |
|             await _events.RaiseAsync(new GrantsRevokedEvent(User.GetSubjectId(), clientId));
 | |
| 
 | |
|             return RedirectToAction("Index");
 | |
|         }
 | |
| 
 | |
|         private async Task<GrantsViewModel> BuildViewModelAsync()
 | |
|         {
 | |
|             var grants = await _interaction.GetAllUserGrantsAsync();
 | |
| 
 | |
|             var list = new List<GrantViewModel>();
 | |
|             foreach (var grant in grants)
 | |
|             {
 | |
|                 var client = await _clients.FindClientByIdAsync(grant.ClientId);
 | |
|                 if (client != null)
 | |
|                 {
 | |
|                     var resources = await _resources.FindResourcesByScopeAsync(grant.Scopes);
 | |
| 
 | |
|                     var item = new GrantViewModel()
 | |
|                     {
 | |
|                         ClientId = client.ClientId,
 | |
|                         ClientName = client.ClientName ?? client.ClientId,
 | |
|                         ClientLogoUrl = client.LogoUri,
 | |
|                         ClientUrl = client.ClientUri,
 | |
|                         Description = grant.Description,
 | |
|                         Created = grant.CreationTime,
 | |
|                         Expires = grant.Expiration,
 | |
|                         IdentityGrantNames = resources.IdentityResources.Select(x => x.DisplayName ?? x.Name).ToArray(),
 | |
|                         ApiGrantNames = resources.ApiScopes.Select(x => x.DisplayName ?? x.Name).ToArray()
 | |
|                     };
 | |
| 
 | |
|                     list.Add(item);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return new GrantsViewModel
 | |
|             {
 | |
|                 Grants = list
 | |
|             };
 | |
|         }
 | |
|     }
 | |
| } |