| 
									
										
										
										
											2020-04-15 00:04:27 +08:00
										 |  |  | package setting | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"gopkg.in/ini.v1" | 
					
						
							| 
									
										
										
										
											2023-12-13 17:25:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/util" | 
					
						
							| 
									
										
										
										
											2020-04-15 00:04:27 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PluginSettings maps plugin id to map of key/value settings.
 | 
					
						
							|  |  |  | type PluginSettings map[string]map[string]string | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func extractPluginSettings(sections []*ini.Section) PluginSettings { | 
					
						
							|  |  |  | 	psMap := PluginSettings{} | 
					
						
							|  |  |  | 	for _, section := range sections { | 
					
						
							|  |  |  | 		sectionName := section.Name() | 
					
						
							|  |  |  | 		if !strings.HasPrefix(sectionName, "plugin.") { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		pluginID := strings.Replace(sectionName, "plugin.", "", 1) | 
					
						
							|  |  |  | 		psMap[pluginID] = section.KeysHash() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return psMap | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-11-15 17:53:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-14 20:36:57 +08:00
										 |  |  | var ( | 
					
						
							|  |  |  | 	defaultPreinstallPlugins = map[string]InstallPlugin{ | 
					
						
							|  |  |  | 		// Default preinstalled plugins
 | 
					
						
							| 
									
										
										
										
											2024-11-29 23:02:33 +08:00
										 |  |  | 		"grafana-lokiexplore-app": {"grafana-lokiexplore-app", "", ""}, | 
					
						
							| 
									
										
										
										
											2024-12-17 23:35:11 +08:00
										 |  |  | 		"grafana-pyroscope-app":   {"grafana-pyroscope-app", "", ""}, | 
					
						
							| 
									
										
										
										
											2024-11-14 20:36:57 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 17:53:35 +08:00
										 |  |  | func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error { | 
					
						
							|  |  |  | 	pluginsSection := iniFile.Section("plugins") | 
					
						
							| 
									
										
										
										
											2023-01-27 22:08:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 17:53:35 +08:00
										 |  |  | 	cfg.PluginsEnableAlpha = pluginsSection.Key("enable_alpha").MustBool(false) | 
					
						
							|  |  |  | 	cfg.PluginsAppsSkipVerifyTLS = pluginsSection.Key("app_tls_skip_verify_insecure").MustBool(false) | 
					
						
							|  |  |  | 	cfg.PluginSettings = extractPluginSettings(iniFile.Sections()) | 
					
						
							| 
									
										
										
										
											2023-06-16 17:20:30 +08:00
										 |  |  | 	cfg.PluginSkipPublicKeyDownload = pluginsSection.Key("public_key_retrieval_disabled").MustBool(false) | 
					
						
							|  |  |  | 	cfg.PluginForcePublicKeyDownload = pluginsSection.Key("public_key_retrieval_on_startup").MustBool(false) | 
					
						
							| 
									
										
										
										
											2022-09-28 14:29:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-13 17:25:17 +08:00
										 |  |  | 	cfg.PluginsAllowUnsigned = util.SplitString(pluginsSection.Key("allow_loading_unsigned_plugins").MustString("")) | 
					
						
							|  |  |  | 	cfg.DisablePlugins = util.SplitString(pluginsSection.Key("disable_plugins").MustString("")) | 
					
						
							|  |  |  | 	cfg.HideAngularDeprecation = util.SplitString(pluginsSection.Key("hide_angular_deprecation").MustString("")) | 
					
						
							|  |  |  | 	cfg.ForwardHostEnvVars = util.SplitString(pluginsSection.Key("forward_host_env_vars").MustString("")) | 
					
						
							| 
									
										
										
										
											2024-08-23 16:32:23 +08:00
										 |  |  | 	disablePreinstall := pluginsSection.Key("preinstall_disabled").MustBool(false) | 
					
						
							| 
									
										
										
										
											2024-08-16 15:44:47 +08:00
										 |  |  | 	if !disablePreinstall { | 
					
						
							|  |  |  | 		rawInstallPlugins := util.SplitString(pluginsSection.Key("preinstall").MustString("")) | 
					
						
							| 
									
										
										
										
											2024-11-14 20:36:57 +08:00
										 |  |  | 		preinstallPlugins := make(map[string]InstallPlugin) | 
					
						
							|  |  |  | 		// Add the default preinstalled plugins
 | 
					
						
							|  |  |  | 		for _, plugin := range defaultPreinstallPlugins { | 
					
						
							|  |  |  | 			preinstallPlugins[plugin.ID] = plugin | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// Add the plugins defined in the configuration
 | 
					
						
							|  |  |  | 		for _, plugin := range rawInstallPlugins { | 
					
						
							| 
									
										
										
										
											2024-08-16 15:44:47 +08:00
										 |  |  | 			parts := strings.Split(plugin, "@") | 
					
						
							|  |  |  | 			id := parts[0] | 
					
						
							| 
									
										
										
										
											2024-11-29 23:02:33 +08:00
										 |  |  | 			version := "" | 
					
						
							|  |  |  | 			url := "" | 
					
						
							|  |  |  | 			if len(parts) > 1 { | 
					
						
							|  |  |  | 				version = parts[1] | 
					
						
							|  |  |  | 				if len(parts) > 2 { | 
					
						
							|  |  |  | 					url = parts[2] | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2024-08-16 15:44:47 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2024-11-29 23:02:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			preinstallPlugins[id] = InstallPlugin{id, version, url} | 
					
						
							| 
									
										
										
										
											2024-11-14 20:36:57 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		// Remove from the list the plugins that have been disabled
 | 
					
						
							|  |  |  | 		for _, disabledPlugin := range cfg.DisablePlugins { | 
					
						
							|  |  |  | 			delete(preinstallPlugins, disabledPlugin) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		for _, plugin := range preinstallPlugins { | 
					
						
							|  |  |  | 			cfg.PreinstallPlugins = append(cfg.PreinstallPlugins, plugin) | 
					
						
							| 
									
										
										
										
											2024-08-13 22:57:55 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2024-08-21 22:11:55 +08:00
										 |  |  | 		cfg.PreinstallPluginsAsync = pluginsSection.Key("preinstall_async").MustBool(true) | 
					
						
							| 
									
										
										
										
											2024-08-13 22:57:55 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-12-12 17:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 17:53:35 +08:00
										 |  |  | 	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) | 
					
						
							| 
									
										
										
										
											2023-12-13 17:25:17 +08:00
										 |  |  | 	cfg.PluginCatalogHiddenPlugins = util.SplitString(pluginsSection.Key("plugin_catalog_hidden_plugins").MustString("")) | 
					
						
							| 
									
										
										
										
											2022-09-28 14:29:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-13 17:25:17 +08:00
										 |  |  | 	// Pull disabled plugins from the catalog
 | 
					
						
							| 
									
										
										
										
											2023-09-14 18:58:12 +08:00
										 |  |  | 	cfg.PluginCatalogHiddenPlugins = append(cfg.PluginCatalogHiddenPlugins, cfg.DisablePlugins...) | 
					
						
							| 
									
										
										
										
											2022-09-28 14:29:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-27 22:08:17 +08:00
										 |  |  | 	// Plugins CDN settings
 | 
					
						
							|  |  |  | 	cfg.PluginsCDNURLTemplate = strings.TrimRight(pluginsSection.Key("cdn_base_url").MustString(""), "/") | 
					
						
							| 
									
										
										
										
											2023-02-07 19:49:16 +08:00
										 |  |  | 	cfg.PluginLogBackendRequests = pluginsSection.Key("log_backend_requests").MustBool(false) | 
					
						
							| 
									
										
										
										
											2023-01-27 22:08:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 17:53:35 +08:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } |