Skip to content

Commit e087656

Browse files
authored
Add session token handling for auth service support (#812)
1 parent a5fb82b commit e087656

File tree

8 files changed

+75
-12
lines changed

8 files changed

+75
-12
lines changed

cspell.config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"jackspeak",
9191
"dompurify",
9292
"zizmor",
93+
"AKIAIOSFODNN",
9394
"npmPreapprovedPackages"
9495
]
9596
}

docker-compose.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ services:
1717
environment:
1818
ACCESS_KEY: ${ACCESS_KEY}
1919
SECRET_KEY: ${SECRET_KEY}
20+
GF_FEATURE_TOGGLES_splashScreen: "false"
21+
GF_FEATURE_TOGGLES_dashboardNewLayouts: "false"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"@babel/core": "^7.28.5",
3939
"@eslint/eslintrc": "^3.3.1",
4040
"@grafana/eslint-config": "^8.2.0",
41-
"@grafana/plugin-e2e": "^2.1.14",
41+
"@grafana/plugin-e2e": "^3.4.12",
4242
"@grafana/tsconfig": "^2.0.1",
4343
"@playwright/test": "1.55.1",
4444
"@stylistic/eslint-plugin-ts": "^4.2.0",

pkg/athena/api/api.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ type Client interface {
3434

3535
var _ Client = &mock.MockAthenaClient{}
3636

37+
var newAWSConfigProvider = awsauth.NewConfigProvider
38+
3739
type API struct {
3840
Client Client
3941
settings *models.AthenaDataSourceSettings
@@ -58,10 +60,11 @@ func New(ctx context.Context, settings sqlModels.Settings) (api.AWSAPI, error) {
5860
region = athenaSettings.DefaultRegion
5961
}
6062

61-
cfg, err := awsauth.NewConfigProvider().GetConfig(ctx, awsauth.Settings{
63+
cfg, err := newAWSConfigProvider().GetConfig(ctx, awsauth.Settings{
6264
LegacyAuthType: athenaSettings.AuthType,
6365
AccessKey: athenaSettings.AccessKey,
6466
SecretKey: athenaSettings.SecretKey,
67+
SessionToken: athenaSettings.SessionToken,
6568
Region: region,
6669
CredentialsProfile: athenaSettings.Profile,
6770
AssumeRoleARN: athenaSettings.AssumeRoleARN,

pkg/athena/api/api_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import (
1010
"github.com/google/go-cmp/cmp"
1111
athenaclientmock "github.com/grafana/athena-datasource/pkg/athena/api/mock"
1212
"github.com/grafana/athena-datasource/pkg/athena/models"
13+
"github.com/grafana/grafana-aws-sdk/pkg/awsauth"
1314
"github.com/grafana/grafana-aws-sdk/pkg/awsds"
1415
"github.com/grafana/grafana-aws-sdk/pkg/sql/api"
1516
"github.com/grafana/grafana-plugin-sdk-go/backend"
1617
"github.com/grafana/sqlds/v5"
1718
"github.com/stretchr/testify/assert"
19+
"github.com/stretchr/testify/require"
1820
)
1921

2022
func TestConnection_Execute(t *testing.T) {
@@ -199,6 +201,37 @@ func TestConnection_ListColumnsForTable(t *testing.T) {
199201
}
200202
}
201203

204+
type spyConfigProvider struct {
205+
captured awsauth.Settings
206+
}
207+
208+
func (s *spyConfigProvider) GetConfig(_ context.Context, settings awsauth.Settings) (aws.Config, error) {
209+
s.captured = settings
210+
return aws.Config{}, nil
211+
}
212+
213+
func TestNew_passesSessionToken(t *testing.T) {
214+
spy := &spyConfigProvider{}
215+
origProvider := newAWSConfigProvider
216+
newAWSConfigProvider = func() awsauth.ConfigProvider { return spy }
217+
t.Cleanup(func() { newAWSConfigProvider = origProvider })
218+
219+
s := &models.AthenaDataSourceSettings{}
220+
err := s.Load(backend.DataSourceInstanceSettings{
221+
JSONData: []byte(`{"authType": "keys", "defaultRegion": "us-east-1"}`),
222+
DecryptedSecureJSONData: map[string]string{
223+
"accessKey": "AKIAIOSFODNN7EXAMPLE",
224+
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
225+
"sessionToken": "AQoDYXdzEJr//test-session-token",
226+
},
227+
})
228+
require.NoError(t, err)
229+
230+
_, err = New(context.Background(), s)
231+
require.NoError(t, err)
232+
assert.Equal(t, "AQoDYXdzEJr//test-session-token", spy.captured.SessionToken)
233+
}
234+
202235
func Test_WorkgroupEngineSupportsResultReuse(t *testing.T) {
203236
assert.True(t, workgroupEngineSupportsResultReuse("Athena engine version 3"))
204237
assert.False(t, workgroupEngineSupportsResultReuse("Athena engine version 2"))

pkg/athena/models/settings.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func (s *AthenaDataSourceSettings) Load(config backend.DataSourceInstanceSetting
4444

4545
s.AccessKey = config.DecryptedSecureJSONData["accessKey"]
4646
s.SecretKey = config.DecryptedSecureJSONData["secretKey"]
47+
s.SessionToken = config.DecryptedSecureJSONData["sessionToken"]
4748

4849
s.Config = config
4950

pkg/athena/models/settings_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,28 @@ import (
66
"github.com/google/go-cmp/cmp"
77
"github.com/grafana/grafana-aws-sdk/pkg/awsds"
88
"github.com/grafana/grafana-aws-sdk/pkg/sql/models"
9+
"github.com/grafana/grafana-plugin-sdk-go/backend"
910
"github.com/grafana/sqlds/v5"
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
1013
)
1114

15+
func TestLoad_sessionToken(t *testing.T) {
16+
s := &AthenaDataSourceSettings{}
17+
config := backend.DataSourceInstanceSettings{
18+
JSONData: []byte(`{"authType": "keys", "defaultRegion": "us-east-1"}`),
19+
DecryptedSecureJSONData: map[string]string{
20+
"accessKey": "AKIAIOSFODNN7EXAMPLE",
21+
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
22+
"sessionToken": "AQoDYXdzEJr//test-session-token",
23+
},
24+
}
25+
26+
err := s.Load(config)
27+
require.NoError(t, err)
28+
assert.Equal(t, "AQoDYXdzEJr//test-session-token", s.SessionToken)
29+
}
30+
1231
func TestConnection_getRegionKey(t *testing.T) {
1332
tests := []struct {
1433
description string

yarn.lock

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,14 +1470,14 @@ __metadata:
14701470
languageName: node
14711471
linkType: hard
14721472

1473-
"@grafana/e2e-selectors@npm:^12.2.0-255920":
1474-
version: 12.2.0
1475-
resolution: "@grafana/e2e-selectors@npm:12.2.0"
1473+
"@grafana/e2e-selectors@npm:13.0.0-23624974663":
1474+
version: 13.0.0-23624974663
1475+
resolution: "@grafana/e2e-selectors@npm:13.0.0-23624974663"
14761476
dependencies:
14771477
semver: "npm:^7.7.0"
14781478
tslib: "npm:2.8.1"
14791479
typescript: "npm:5.9.2"
1480-
checksum: 10c0/ab94a4dbb2299f439bc798e198b86291091958bfe858d3cdfbf7fbde9c3d5a03265e320158c12dd950a8fed07deb635d2f3636bdc00c14d1d802efd91010593d
1480+
checksum: 10c0/714095fbf1932c49a923027e0d6d5e6d89f7dd06070e512716f58a7a2241eeac10b24ef9427b5ff5a21b2e4df43240ed2532676197e5daa75e7828b044e7bc54
14811481
languageName: node
14821482
linkType: hard
14831483

@@ -1519,17 +1519,21 @@ __metadata:
15191519
languageName: node
15201520
linkType: hard
15211521

1522-
"@grafana/plugin-e2e@npm:^2.1.14":
1523-
version: 2.1.14
1524-
resolution: "@grafana/plugin-e2e@npm:2.1.14"
1522+
"@grafana/plugin-e2e@npm:^3.4.12":
1523+
version: 3.4.12
1524+
resolution: "@grafana/plugin-e2e@npm:3.4.12"
15251525
dependencies:
1526-
"@grafana/e2e-selectors": "npm:^12.2.0-255920"
1526+
"@grafana/e2e-selectors": "npm:13.0.0-23624974663"
15271527
semver: "npm:^7.5.4"
15281528
uuid: "npm:^13.0.0"
15291529
yaml: "npm:^2.3.4"
15301530
peerDependencies:
1531+
"@axe-core/playwright": ^4.11.1
15311532
"@playwright/test": ^1.52.0
1532-
checksum: 10c0/86d08b06583585e3a1e09cd404f2f7d59bccc480020718cf913989ae5051115fb41c6169d8e2e7b7d07e25c5a0748e77ce979b8aa16cd2f8f94c3ab18537f696
1533+
peerDependenciesMeta:
1534+
"@axe-core/playwright":
1535+
optional: true
1536+
checksum: 10c0/b87340d2cb04bcbcaf7676d61f8f990fd26ba1d8f53cfb922e89a4751ede29bbe61021d770d3a9ebdf4500fe404fe6512ddea03be4d1c08ee15d22e9e5a376e7
15331537
languageName: node
15341538
linkType: hard
15351539

@@ -7323,7 +7327,7 @@ __metadata:
73237327
"@grafana/aws-sdk": "npm:0.10.2"
73247328
"@grafana/data": "npm:^12.0.2"
73257329
"@grafana/eslint-config": "npm:^8.2.0"
7326-
"@grafana/plugin-e2e": "npm:^2.1.14"
7330+
"@grafana/plugin-e2e": "npm:^3.4.12"
73277331
"@grafana/plugin-ui": "npm:^0.13.0"
73287332
"@grafana/runtime": "npm:^12.0.2"
73297333
"@grafana/schema": "npm:12.0.2"

0 commit comments

Comments
 (0)