private async Task <ProcessConsentResult> ProcessConsent(ConsentInputModel model) { var result = new ProcessConsentResult(); var request = await _interactionService.GetAuthorizationContextAsync(model.ReturnUrl); if (request == null) { return(result); } ConsentResponse consentResponse = null; switch (model.Button) { case "no": { consentResponse = new ConsentResponse { Error = AuthorizationError.AccessDenied }; await _eventService.RaiseAsync(new ConsentDeniedEvent(User.GetSubjectId(), request.Client.ClientId, request.ValidatedResources.RawScopeValues)); break; } case "yes" when model.ScopesConsented != null && model.ScopesConsented.Any(): { var scopes = model.ScopesConsented; if (ConsentOptions.EnableOfflineAccess == false) { scopes = scopes.Where(scope => scope != IdentityServerConstants.StandardScopes.OfflineAccess); } consentResponse = new ConsentResponse { Description = model.Description, RememberConsent = model.RememberConsent, ScopesValuesConsented = scopes.ToArray() }; await _eventService.RaiseAsync(new ConsentGrantedEvent(User.GetSubjectId(), request.Client.ClientId, request.ValidatedResources.RawScopeValues, consentResponse.ScopesValuesConsented, consentResponse.RememberConsent)); break; } case "yes": { result.ValidationError = ConsentOptions.MustChooseOneErrorMessage; break; } default: { result.ValidationError = ConsentOptions.InvalidSelectionErrorMessage; break; } } if (consentResponse != null) { await _interactionService.GrantConsentAsync(request, consentResponse); result.Client = request.Client; result.RedirectUri = model.ReturnUrl; } else { result.ViewModel = await BuildViewModelAsync(model.ReturnUrl, model); } return(result); }
private async Task <ConsentViewModel> BuildViewModelAsync(string returnUrl, ConsentInputModel model = null) { var request = await _interactionService.GetAuthorizationContextAsync(returnUrl); return(request != null?CreateConsentViewModel(model, returnUrl, request) : null); }