Datasources: Add HTTPClientOptions method to DataSourceService

pull/106683/head
Alexander Akhmetov 1 month ago
parent 0016b57486
commit 5887500ddd
No known key found for this signature in database
GPG Key ID: A5A8947133B1B31B
  1. 3
      pkg/services/datasources/datasources.go
  2. 20
      pkg/services/datasources/fakes/fake_datasource_service.go
  3. 4
      pkg/services/datasources/service/datasource.go
  4. 10
      pkg/services/datasources/service/datasource_test.go

@ -39,6 +39,9 @@ type DataSourceService interface {
// GetHTTPTransport gets a datasource specific HTTP transport.
GetHTTPTransport(ctx context.Context, ds *DataSource, provider httpclient.Provider, customMiddlewares ...sdkhttpclient.Middleware) (http.RoundTripper, error)
// HTTPClientOptions returns the HTTP client options for the given datasource.
HTTPClientOptions(ctx context.Context, ds *DataSource) (*sdkhttpclient.Options, error)
// DecryptedValues decrypts the encrypted secureJSONData of the provided datasource and
// returns the decrypted values.
DecryptedValues(ctx context.Context, ds *DataSource) (map[string]string, error)

@ -5,6 +5,7 @@ import (
"net/http"
sdkhttpclient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
sdkproxy "github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
"github.com/grafana/grafana/pkg/infra/httpclient"
"github.com/grafana/grafana/pkg/services/datasources"
@ -121,6 +122,25 @@ func (s *FakeDataSourceService) GetHTTPTransport(ctx context.Context, ds *dataso
return rt, nil
}
func (s *FakeDataSourceService) HTTPClientOptions(ctx context.Context, ds *datasources.DataSource) (*sdkhttpclient.Options, error) {
opts := &sdkhttpclient.Options{
Header: make(http.Header),
}
if ds.JsonData != nil && ds.JsonData.Get("enableSecureSocksProxy").MustBool(false) {
opts.ProxyOptions = &sdkproxy.Options{
Enabled: true,
DatasourceName: ds.UID,
DatasourceType: ds.Type,
Auth: &sdkproxy.AuthOptions{
Username: ds.JsonData.Get("secureSocksProxyUsername").MustString(""),
},
}
}
return opts, nil
}
func (s *FakeDataSourceService) DecryptedValues(ctx context.Context, ds *datasources.DataSource) (map[string]string, error) {
return make(map[string]string), nil
}

@ -595,7 +595,7 @@ func (s *Service) GetHTTPTransport(ctx context.Context, ds *datasources.DataSour
return t.roundTripper, nil
}
opts, err := s.httpClientOptions(ctx, ds)
opts, err := s.HTTPClientOptions(ctx, ds)
if err != nil {
return nil, err
}
@ -678,7 +678,7 @@ func (s *Service) DecryptedPassword(ctx context.Context, ds *datasources.DataSou
return "", err
}
func (s *Service) httpClientOptions(ctx context.Context, ds *datasources.DataSource) (*sdkhttpclient.Options, error) {
func (s *Service) HTTPClientOptions(ctx context.Context, ds *datasources.DataSource) (*sdkhttpclient.Options, error) {
tlsOptions, err := s.dsTLSOptions(ctx, ds)
if err != nil {
return nil, err

@ -1220,11 +1220,11 @@ func TestService_GetHttpTransport(t *testing.T) {
require.NotNil(t, rt)
tr := configuredTransport
opts, err := dsService.httpClientOptions(context.Background(), &ds)
opts, err := dsService.HTTPClientOptions(context.Background(), &ds)
require.NoError(t, err)
require.Equal(t, ds.JsonData.MustMap()["grafanaData"], opts.CustomOptions["grafanaData"])
// make sure we can still marshal the JsonData after httpClientOptions (avoid cycles)
// make sure we can still marshal the JsonData after HTTPClientOptions (avoid cycles)
_, err = ds.JsonData.MarshalJSON()
require.NoError(t, err)
@ -1468,7 +1468,7 @@ func TestService_getProxySettings(t *testing.T) {
Type: "Graphite",
}
opts, err := dsService.httpClientOptions(context.Background(), &ds)
opts, err := dsService.HTTPClientOptions(context.Background(), &ds)
require.NoError(t, err)
require.Nil(t, opts.ProxyOptions)
})
@ -1486,7 +1486,7 @@ func TestService_getProxySettings(t *testing.T) {
JsonData: sjson,
}
opts, err := dsService.httpClientOptions(context.Background(), &ds)
opts, err := dsService.HTTPClientOptions(context.Background(), &ds)
require.NoError(t, err)
require.True(t, opts.ProxyOptions.Enabled)
require.Equal(t, opts.ProxyOptions.Auth.Username, ds.UID)
@ -1518,7 +1518,7 @@ func TestService_getProxySettings(t *testing.T) {
err = secretsStore.Set(context.Background(), ds.OrgID, ds.Name, secretskvs.DataSourceSecretType, string(secureJsonData))
require.NoError(t, err)
opts, err := dsService.httpClientOptions(context.Background(), &ds)
opts, err := dsService.HTTPClientOptions(context.Background(), &ds)
require.NoError(t, err)
require.True(t, opts.ProxyOptions.Enabled)
require.Equal(t, opts.ProxyOptions.Auth.Username, user)

Loading…
Cancel
Save