Skip to content

Commit

Permalink
[v11.0.x] SSO: fix reloading settings when a provider contains empty …
Browse files Browse the repository at this point in the history
…settings (#86142)

SSO: fix reloading settings when a provider contains empty settings (#85102)

* fix reloading settings when a provider contains empty settings

* do not increment reloadFailures if settings are empty

(cherry picked from commit fad6dc4)

Co-authored-by: Mihai Doarna <mihai.doarna@grafana.com>
  • Loading branch information
grafana-delivery-bot[bot] and dmihai committed Apr 15, 2024
1 parent d08ca1f commit 2cf7301
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
9 changes: 7 additions & 2 deletions pkg/services/ssosettings/ssosettingsimpl/service.go
Expand Up @@ -365,9 +365,14 @@ func (s *Service) doReload(ctx context.Context) {
}

for provider, connector := range s.reloadables {
setting := getSettingByProvider(provider, settingsList)
settings := getSettingByProvider(provider, settingsList)

err = connector.Reload(ctx, *setting)
if settings == nil || len(settings.Settings) == 0 {
s.logger.Warn("SSO Settings is empty", "provider", provider)
continue
}

err = connector.Reload(ctx, *settings)
if err != nil {
s.metrics.reloadFailures.WithLabelValues(provider).Inc()
s.logger.Error("failed to reload SSO Settings", "provider", provider, "err", err)
Expand Down
30 changes: 30 additions & 0 deletions pkg/services/ssosettings/ssosettingsimpl/service_test.go
Expand Up @@ -1248,6 +1248,36 @@ func TestService_DoReload(t *testing.T) {
env.service.doReload(context.Background())
})

t.Run("successfully reload settings when some providers have empty settings", func(t *testing.T) {
t.Parallel()

env := setupTestEnv(t, false, false, nil)

settingsList := []*models.SSOSettings{
{
Provider: "azuread",
Settings: map[string]any{
"enabled": true,
"client_id": "azuread_client_id",
},
},
{
Provider: "google",
Settings: map[string]any{},
},
}
env.store.ExpectedSSOSettings = settingsList

reloadable := ssosettingstests.NewMockReloadable(t)
reloadable.On("Reload", mock.Anything, *settingsList[0]).Return(nil).Once()
env.reloadables["azuread"] = reloadable

// registers a provider with empty settings
env.reloadables["github"] = nil

env.service.doReload(context.Background())
})

t.Run("failed fetching the SSO settings", func(t *testing.T) {
t.Parallel()

Expand Down

0 comments on commit 2cf7301

Please sign in to comment.