diff --git a/conf/defaults.ini b/conf/defaults.ini index a9b1b285971..5022515212c 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -972,6 +972,8 @@ allow_loading_unsigned_plugins = plugin_admin_enabled = true plugin_admin_external_manage_enabled = false plugin_catalog_url = https://grafana.com/grafana/plugins/ +# Enter a comma-separated list of plugin identifiers to hide in the plugin catalog. +plugin_catalog_hidden_plugins = #################################### Grafana Live ########################################## [live] diff --git a/conf/sample.ini b/conf/sample.ini index dd2b3f72c05..87089311c7e 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -945,6 +945,8 @@ ;plugin_admin_enabled = false ;plugin_admin_external_manage_enabled = false ;plugin_catalog_url = https://grafana.com/grafana/plugins/ +# Enter a comma-separated list of plugin identifiers to hide in the plugin catalog. +;plugin_catalog_hidden_plugins = #################################### Grafana Live ########################################## [live] diff --git a/docs/sources/administration/configuration.md b/docs/sources/administration/configuration.md index 19eaa6cad3f..2939b94e448 100644 --- a/docs/sources/administration/configuration.md +++ b/docs/sources/administration/configuration.md @@ -1594,6 +1594,10 @@ Set to `true` if you want to enable external management of plugins. Default is ` Custom install/learn more URL for enterprise plugins. Defaults to https://grafana.com/grafana/plugins/. +### plugin_catalog_hidden_plugins + +Enter a comma-separated list of plugin identifiers to hide in the plugin catalog. +
## [live] diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 2cb1d4539b3..b5cc24de00c 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -298,7 +298,8 @@ func (hs *HTTPServer) getFrontendSettingsMap(c *models.ReqContext) (map[string]i "caching": map[string]bool{ "enabled": hs.Cfg.SectionWithEnvOverrides("caching").Key("enabled").MustBool(true), }, - "unifiedAlertingEnabled": hs.Cfg.UnifiedAlerting.Enabled, + "unifiedAlertingEnabled": hs.Cfg.UnifiedAlerting.Enabled, + "pluginCatalogHiddenPlugins": hs.Cfg.PluginCatalogHiddenPlugins, } if hs.Cfg.GeomapDefaultBaseLayerConfig != nil { diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 0e9a3d699bc..4dd0c197461 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -258,6 +258,7 @@ type Cfg struct { PluginSettings PluginSettings PluginsAllowUnsigned []string PluginCatalogURL string + PluginCatalogHiddenPlugins []string PluginAdminEnabled bool PluginAdminExternalManageEnabled bool DisableSanitizeHtml bool @@ -923,18 +924,9 @@ func (cfg *Cfg) Load(args CommandLineArgs) error { panelsSection := iniFile.Section("panels") cfg.DisableSanitizeHtml = panelsSection.Key("disable_sanitize_html").MustBool(false) - pluginsSection := iniFile.Section("plugins") - cfg.PluginsEnableAlpha = pluginsSection.Key("enable_alpha").MustBool(false) - cfg.PluginsAppsSkipVerifyTLS = pluginsSection.Key("app_tls_skip_verify_insecure").MustBool(false) - cfg.PluginSettings = extractPluginSettings(iniFile.Sections()) - pluginsAllowUnsigned := pluginsSection.Key("allow_loading_unsigned_plugins").MustString("") - for _, plug := range strings.Split(pluginsAllowUnsigned, ",") { - plug = strings.TrimSpace(plug) - cfg.PluginsAllowUnsigned = append(cfg.PluginsAllowUnsigned, plug) + if err := cfg.readPluginSettings(iniFile); err != nil { + return err } - cfg.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/") - cfg.PluginAdminEnabled = pluginsSection.Key("plugin_admin_enabled").MustBool(true) - cfg.PluginAdminExternalManageEnabled = pluginsSection.Key("plugin_admin_external_manage_enabled").MustBool(false) if err := cfg.readFeatureToggles(iniFile); err != nil { return err diff --git a/pkg/setting/setting_plugins.go b/pkg/setting/setting_plugins.go index 0430f630cd7..760c4762bf1 100644 --- a/pkg/setting/setting_plugins.go +++ b/pkg/setting/setting_plugins.go @@ -23,3 +23,25 @@ func extractPluginSettings(sections []*ini.Section) PluginSettings { return psMap } + +func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error { + pluginsSection := iniFile.Section("plugins") + cfg.PluginsEnableAlpha = pluginsSection.Key("enable_alpha").MustBool(false) + cfg.PluginsAppsSkipVerifyTLS = pluginsSection.Key("app_tls_skip_verify_insecure").MustBool(false) + cfg.PluginSettings = extractPluginSettings(iniFile.Sections()) + pluginsAllowUnsigned := pluginsSection.Key("allow_loading_unsigned_plugins").MustString("") + for _, plug := range strings.Split(pluginsAllowUnsigned, ",") { + plug = strings.TrimSpace(plug) + cfg.PluginsAllowUnsigned = append(cfg.PluginsAllowUnsigned, plug) + } + cfg.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/") + cfg.PluginAdminEnabled = pluginsSection.Key("plugin_admin_enabled").MustBool(true) + cfg.PluginAdminExternalManageEnabled = pluginsSection.Key("plugin_admin_external_manage_enabled").MustBool(false) + + catalogHiddenPlugins := pluginsSection.Key("plugin_catalog_hidden_plugins").MustString("") + for _, plug := range strings.Split(catalogHiddenPlugins, ",") { + plug = strings.TrimSpace(plug) + cfg.PluginCatalogHiddenPlugins = append(cfg.PluginCatalogHiddenPlugins, plug) + } + return nil +}