Auth: Attach external session info to Grafana session (#93849)
* initial from poc changes * wip * Remove public external session service * Update swagger * Fix merge * Cleanup * Add backgroud service for cleanup * Add auth_module to user_external_session * Add tests for token revocation functions * Add secret migration capabilities for user_external_session fields * Cleanup, refactor to address feedback * Fix test
This commit is contained in:
@@ -9,9 +9,14 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/db"
|
||||
"github.com/grafana/grafana/pkg/services/auth"
|
||||
)
|
||||
|
||||
func TestUserAuthTokenCleanup(t *testing.T) {
|
||||
func TestIntegrationUserAuthTokenCleanup(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping integration test")
|
||||
}
|
||||
|
||||
setup := func() *testContext {
|
||||
ctx := createTestContext(t)
|
||||
maxInactiveLifetime, _ := time.ParseDuration("168h")
|
||||
@@ -75,3 +80,61 @@ func TestUserAuthTokenCleanup(t *testing.T) {
|
||||
require.Equal(t, int64(3), affected)
|
||||
})
|
||||
}
|
||||
|
||||
func TestIntegrationOrphanedExternalSessionsCleanup(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping integration test")
|
||||
}
|
||||
|
||||
setup := func() *testContext {
|
||||
ctx := createTestContext(t)
|
||||
return ctx
|
||||
}
|
||||
|
||||
insertExternalSession := func(ctx *testContext, id int64) {
|
||||
es := &auth.ExternalSession{ID: id, UserAuthID: 1, UserID: 1}
|
||||
err := ctx.sqlstore.WithDbSession(context.Background(), func(sess *db.Session) error {
|
||||
_, err := sess.Insert(es)
|
||||
require.Nil(t, err)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
insertAuthToken := func(ctx *testContext, token string, externalSessionId int64) {
|
||||
ut := userAuthToken{AuthToken: token, PrevAuthToken: fmt.Sprintf("old%s", token), ExternalSessionId: externalSessionId}
|
||||
err := ctx.sqlstore.WithDbSession(context.Background(), func(sess *db.Session) error {
|
||||
_, err := sess.Insert(&ut)
|
||||
require.Nil(t, err)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
t.Run("should delete orphaned external sessions", func(t *testing.T) {
|
||||
ctx := setup()
|
||||
|
||||
// insert three external sessions
|
||||
for i := int64(1); i <= 3; i++ {
|
||||
insertExternalSession(ctx, i)
|
||||
}
|
||||
|
||||
// insert two auth tokens linked to external sessions
|
||||
insertAuthToken(ctx, "token1", 1)
|
||||
insertAuthToken(ctx, "token2", 2)
|
||||
|
||||
// delete orphaned external sessions
|
||||
err := ctx.tokenService.deleteOrphanedExternalSessions(context.Background())
|
||||
require.NoError(t, err)
|
||||
|
||||
// verify that only the orphaned external session is deleted
|
||||
var count int64
|
||||
err = ctx.sqlstore.WithDbSession(context.Background(), func(sess *db.Session) error {
|
||||
count, err = sess.Count(&auth.ExternalSession{})
|
||||
require.Nil(t, err)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(2), count)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user