mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 12:14:08 -06:00
319a874033
* Password auth for Azure AD * rename auth fields * add azure flag for client password cred enabled * prettier * rename flag * Update go.mod * Update public/app/plugins/datasource/mssql/azureauth/AzureCredentialsForm.tsx Co-authored-by: Andreas Christou <andreas.christou@grafana.com> * Apply suggestions from code review Co-authored-by: Andreas Christou <andreas.christou@grafana.com> * update package * go mod * prettier * remove password * gowork * remove unused env test * linter --------- Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
176 lines
6.4 KiB
Go
176 lines
6.4 KiB
Go
package pluginconfig
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/grafana/grafana-aws-sdk/pkg/awsds"
|
|
"github.com/grafana/grafana-azure-sdk-go/v2/azsettings"
|
|
"github.com/grafana/grafana/pkg/plugins/auth"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
|
|
"github.com/grafana/grafana-plugin-sdk-go/experimental/featuretoggles"
|
|
)
|
|
|
|
var _ PluginRequestConfigProvider = (*RequestConfigProvider)(nil)
|
|
|
|
type PluginRequestConfigProvider interface {
|
|
PluginRequestConfig(ctx context.Context, pluginID string, externalService *auth.ExternalService) map[string]string
|
|
}
|
|
|
|
type RequestConfigProvider struct {
|
|
cfg *PluginInstanceCfg
|
|
}
|
|
|
|
func NewRequestConfigProvider(cfg *PluginInstanceCfg) *RequestConfigProvider {
|
|
return &RequestConfigProvider{
|
|
cfg: cfg,
|
|
}
|
|
}
|
|
|
|
// PluginRequestConfig returns a map of configuration that should be passed in a plugin request.
|
|
// nolint:gocyclo
|
|
func (s *RequestConfigProvider) PluginRequestConfig(ctx context.Context, pluginID string, externalService *auth.ExternalService) map[string]string {
|
|
m := make(map[string]string)
|
|
|
|
if s.cfg.GrafanaAppURL != "" {
|
|
m[backend.AppURL] = s.cfg.GrafanaAppURL
|
|
}
|
|
if s.cfg.ConcurrentQueryCount != 0 {
|
|
m[backend.ConcurrentQueryCount] = strconv.Itoa(s.cfg.ConcurrentQueryCount)
|
|
}
|
|
|
|
enabledFeatures := s.cfg.Features.GetEnabled(ctx)
|
|
if len(enabledFeatures) > 0 {
|
|
features := make([]string, 0, len(enabledFeatures))
|
|
for feat := range enabledFeatures {
|
|
features = append(features, feat)
|
|
}
|
|
sort.Strings(features)
|
|
m[featuretoggles.EnabledFeatures] = strings.Join(features, ",")
|
|
}
|
|
|
|
if slices.Contains[[]string, string](s.cfg.AWSForwardSettingsPlugins, pluginID) {
|
|
if !s.cfg.AWSAssumeRoleEnabled {
|
|
m[awsds.AssumeRoleEnabledEnvVarKeyName] = "false"
|
|
}
|
|
if len(s.cfg.AWSAllowedAuthProviders) > 0 {
|
|
m[awsds.AllowedAuthProvidersEnvVarKeyName] = strings.Join(s.cfg.AWSAllowedAuthProviders, ",")
|
|
}
|
|
if s.cfg.AWSExternalId != "" {
|
|
m[awsds.GrafanaAssumeRoleExternalIdKeyName] = s.cfg.AWSExternalId
|
|
}
|
|
if s.cfg.AWSSessionDuration != "" {
|
|
m[awsds.SessionDurationEnvVarKeyName] = s.cfg.AWSSessionDuration
|
|
}
|
|
if s.cfg.AWSListMetricsPageLimit != "" {
|
|
m[awsds.ListMetricsPageLimitKeyName] = s.cfg.AWSListMetricsPageLimit
|
|
}
|
|
}
|
|
|
|
if s.cfg.ProxySettings.Enabled {
|
|
m[proxy.PluginSecureSocksProxyEnabled] = "true"
|
|
m[proxy.PluginSecureSocksProxyClientCert] = s.cfg.ProxySettings.ClientCertFilePath
|
|
m[proxy.PluginSecureSocksProxyClientCertContents] = s.cfg.ProxySettings.ClientCert
|
|
m[proxy.PluginSecureSocksProxyClientKey] = s.cfg.ProxySettings.ClientKeyFilePath
|
|
m[proxy.PluginSecureSocksProxyClientKeyContents] = s.cfg.ProxySettings.ClientKey
|
|
m[proxy.PluginSecureSocksProxyRootCAs] = strings.Join(s.cfg.ProxySettings.RootCAFilePaths, " ")
|
|
m[proxy.PluginSecureSocksProxyRootCAsContents] = strings.Join(s.cfg.ProxySettings.RootCAs, ",")
|
|
m[proxy.PluginSecureSocksProxyProxyAddress] = s.cfg.ProxySettings.ProxyAddress
|
|
m[proxy.PluginSecureSocksProxyServerName] = s.cfg.ProxySettings.ServerName
|
|
m[proxy.PluginSecureSocksProxyAllowInsecure] = strconv.FormatBool(s.cfg.ProxySettings.AllowInsecure)
|
|
}
|
|
|
|
// Settings here will be extracted by grafana-azure-sdk-go from the plugin context
|
|
if s.cfg.AzureAuthEnabled {
|
|
m[azsettings.AzureAuthEnabled] = strconv.FormatBool(s.cfg.AzureAuthEnabled)
|
|
}
|
|
azureSettings := s.cfg.Azure
|
|
if azureSettings != nil && slices.Contains[[]string, string](azureSettings.ForwardSettingsPlugins, pluginID) {
|
|
if azureSettings.Cloud != "" {
|
|
m[azsettings.AzureCloud] = azureSettings.Cloud
|
|
}
|
|
|
|
if len(azureSettings.CustomCloudListJSON) > 0 {
|
|
m[azsettings.AzureCustomCloudsConfig] = azureSettings.CustomCloudListJSON
|
|
}
|
|
|
|
if azureSettings.ManagedIdentityEnabled {
|
|
m[azsettings.ManagedIdentityEnabled] = "true"
|
|
|
|
if azureSettings.ManagedIdentityClientId != "" {
|
|
m[azsettings.ManagedIdentityClientID] = azureSettings.ManagedIdentityClientId
|
|
}
|
|
}
|
|
|
|
if azureSettings.UserIdentityEnabled {
|
|
m[azsettings.UserIdentityEnabled] = "true"
|
|
m[azsettings.UserIdentityFallbackCredentialsEnabled] = strconv.FormatBool(azureSettings.UserIdentityFallbackCredentialsEnabled)
|
|
|
|
if azureSettings.UserIdentityTokenEndpoint != nil {
|
|
if azureSettings.UserIdentityTokenEndpoint.TokenUrl != "" {
|
|
m[azsettings.UserIdentityTokenURL] = azureSettings.UserIdentityTokenEndpoint.TokenUrl
|
|
}
|
|
if azureSettings.UserIdentityTokenEndpoint.ClientId != "" {
|
|
m[azsettings.UserIdentityClientID] = azureSettings.UserIdentityTokenEndpoint.ClientId
|
|
}
|
|
if azureSettings.UserIdentityTokenEndpoint.ClientSecret != "" {
|
|
m[azsettings.UserIdentityClientSecret] = azureSettings.UserIdentityTokenEndpoint.ClientSecret
|
|
}
|
|
if azureSettings.UserIdentityTokenEndpoint.UsernameAssertion {
|
|
m[azsettings.UserIdentityAssertion] = "username"
|
|
}
|
|
}
|
|
}
|
|
|
|
if azureSettings.WorkloadIdentityEnabled {
|
|
m[azsettings.WorkloadIdentityEnabled] = "true"
|
|
|
|
if azureSettings.WorkloadIdentitySettings != nil {
|
|
if azureSettings.WorkloadIdentitySettings.ClientId != "" {
|
|
m[azsettings.WorkloadIdentityClientID] = azureSettings.WorkloadIdentitySettings.ClientId
|
|
}
|
|
if azureSettings.WorkloadIdentitySettings.TenantId != "" {
|
|
m[azsettings.WorkloadIdentityTenantID] = azureSettings.WorkloadIdentitySettings.TenantId
|
|
}
|
|
if azureSettings.WorkloadIdentitySettings.TokenFile != "" {
|
|
m[azsettings.WorkloadIdentityTokenFile] = azureSettings.WorkloadIdentitySettings.TokenFile
|
|
}
|
|
}
|
|
}
|
|
|
|
m[azsettings.AzureEntraPasswordCredentialsEnabled] = strconv.FormatBool(azureSettings.AzureEntraPasswordCredentialsEnabled)
|
|
}
|
|
|
|
if s.cfg.UserFacingDefaultError != "" {
|
|
m[backend.UserFacingDefaultError] = s.cfg.UserFacingDefaultError
|
|
}
|
|
|
|
if s.cfg.DataProxyRowLimit != 0 {
|
|
m[backend.SQLRowLimit] = strconv.FormatInt(s.cfg.DataProxyRowLimit, 10)
|
|
}
|
|
|
|
m[backend.SQLMaxOpenConnsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxOpenConnsDefault)
|
|
m[backend.SQLMaxIdleConnsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxIdleConnsDefault)
|
|
m[backend.SQLMaxConnLifetimeSecondsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxConnLifetimeDefault)
|
|
|
|
if s.cfg.ResponseLimit > 0 {
|
|
m[backend.ResponseLimit] = strconv.FormatInt(s.cfg.ResponseLimit, 10)
|
|
}
|
|
|
|
if s.cfg.SigV4AuthEnabled {
|
|
m[awsds.SigV4AuthEnabledEnvVarKeyName] = "true"
|
|
m[awsds.SigV4VerboseLoggingEnvVarKeyName] = strconv.FormatBool(s.cfg.SigV4VerboseLogging)
|
|
}
|
|
|
|
if externalService != nil {
|
|
m[backend.AppClientSecret] = externalService.ClientSecret
|
|
}
|
|
|
|
return m
|
|
}
|