public async Task<IActionResult> Index(string button, string id, ConsentInputModel model) { if (button == "no") { return new ConsentResult(id, ConsentResponse.Denied); } else if (button == "yes" && model != null) { if (model.ScopesConsented != null && model.ScopesConsented.Any()) { return new ConsentResult(id, new ConsentResponse { RememberConsent = model.RememberConsent, ScopesConsented = model.ScopesConsented }); } else { ModelState.AddModelError("", "You must pick at least one permission."); } } else { ModelState.AddModelError("", "Invalid Selection"); } var vm = await BuildViewModelAsync(id, model); if (vm != null) { return View("Index", vm); } return View("Error"); }
public ConsentViewModel(ConsentInputModel model, string consentId, ConsentRequest request, Client client, IEnumerable<Scope> scopes, ILocalizationService localization) { RememberConsent = model?.RememberConsent ?? true; ScopesConsented = model?.ScopesConsented ?? Enumerable.Empty<string>(); ConsentId = consentId; ClientName = client.ClientName; ClientUrl = client.ClientUri; ClientLogoUrl = client.LogoUri; AllowRememberConsent = client.AllowRememberConsent; IdentityScopes = scopes.Where(x => x.Type == ScopeType.Identity).Select(x => new ScopeViewModel(localization, x, ScopesConsented.Contains(x.Name) || model == null)).ToArray(); ResourceScopes = scopes.Where(x => x.Type == ScopeType.Resource).Select(x => new ScopeViewModel(localization, x, ScopesConsented.Contains(x.Name) || model == null)).ToArray(); }
async Task<ConsentViewModel> BuildViewModelAsync(string id, ConsentInputModel model = null) { if (id != null) { var request = await _consentInteraction.GetRequestAsync(id); if (request != null) { var client = await _clientStore.FindClientByIdAsync(request.ClientId); if (client != null) { var scopes = await _scopeStore.FindScopesAsync(request.ScopesRequested); if (scopes != null && scopes.Any()) { return new ConsentViewModel(model, id, request, client, scopes, _localization); } else { _logger.LogError("No scopes matching: {0}", request.ScopesRequested.Aggregate((x, y) => x + ", " + y)); } } else { _logger.LogError("Invalid client id: {0}", request.ClientId); } } else { _logger.LogError("No consent request matching id: {0}", id); } } else { _logger.LogError("No id passed"); } return null; }