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);
        }