/// <summary>
        /// Prepare paged multi-factor authentication method list model
        /// </summary>
        /// <param name="searchModel">Multi-factor authentication method search model</param>
        /// <returns>Multi-factor authentication method list model</returns>
        public virtual MultiFactorAuthenticationMethodListModel PrepareMultiFactorAuthenticationMethodListModel(
            MultiFactorAuthenticationMethodSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get multi-factor authentication methods
            var multiFactorAuthenticationMethods = _multiFactorAuthenticationPluginManager.LoadAllPlugins().ToPagedList(searchModel);

            //prepare grid model
            var model = new MultiFactorAuthenticationMethodListModel().PrepareToGrid(searchModel, multiFactorAuthenticationMethods, () =>
            {
                //fill in model values from the entity
                return(multiFactorAuthenticationMethods.Select(method =>
                {
                    //fill in model values from the entity
                    var multiFactorAuthenticationMethodModel = method.ToPluginModel <MultiFactorAuthenticationMethodModel>();

                    //fill in additional values (not existing in the entity)
                    multiFactorAuthenticationMethodModel.IsActive = _multiFactorAuthenticationPluginManager.IsPluginActive(method);
                    multiFactorAuthenticationMethodModel.ConfigurationUrl = method.GetConfigurationPageUrl();

                    return multiFactorAuthenticationMethodModel;
                }));
            });

            return(model);
        }
        public virtual async Task <IActionResult> MultiFactorMethods(MultiFactorAuthenticationMethodSearchModel searchModel)
        {
            if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageMultifactorAuthenticationMethods))
            {
                return(await AccessDeniedDataTablesJson());
            }

            //prepare model
            var model = await _multiFactorAuthenticationMethodModelFactory.PrepareMultiFactorAuthenticationMethodListModelAsync(searchModel);

            return(Json(model));
        }
        /// <summary>
        /// Prepare multi-factor authentication method search model
        /// </summary>
        /// <param name="searchModel">Multi-factor authentication method search model</param>
        /// <returns>Multi-factor authentication method search model</returns>
        public virtual MultiFactorAuthenticationMethodSearchModel PrepareMultiFactorAuthenticationMethodSearchModel(
            MultiFactorAuthenticationMethodSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //prepare page parameters
            searchModel.SetGridPageSize();

            return(searchModel);
        }