From de917467cb1ea156282004e314322362a6bc8122 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 28 Jul 2025 11:39:57 +0200 Subject: [PATCH] fix(openid): manually fetch providers Partially reverts fcdcdcf46a2d59ad635c4dda9797889822321c56 Resolves https://github.com/go-vikunja/vikunja/issues/1165 --- pkg/modules/auth/openid/providers.go | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/pkg/modules/auth/openid/providers.go b/pkg/modules/auth/openid/providers.go index d50c99bc9..d9b3e39e5 100644 --- a/pkg/modules/auth/openid/providers.go +++ b/pkg/modules/auth/openid/providers.go @@ -89,32 +89,21 @@ func GetAllProviders() (providers []*Provider, err error) { // GetProvider retrieves a provider from keyvalue func GetProvider(key string) (provider *Provider, err error) { - result, err := keyvalue.Remember("openid_provider_"+key, func() (any, error) { - _, err := GetAllProviders() // This will put all providers in cache + provider = &Provider{} + exists, err := keyvalue.GetWithValue("openid_provider_"+key, provider) + if err != nil { + return nil, err + } + if !exists { + _, err = GetAllProviders() // This will put all providers in cache if err != nil { return nil, err } - provider := &Provider{} _, err = keyvalue.GetWithValue("openid_provider_"+key, provider) if err != nil { return nil, err } - return provider, nil - }) - if err != nil { - return nil, err - } - - // Handle type assertion safely - the memory backend strips pointer info when storing - switch v := result.(type) { - case *Provider: - provider = v - case Provider: - provider = &v - default: - log.Debugf("stored cached provider has an invalid type %T, value: %v", result, result) - return nil, fmt.Errorf("invalid cached provider type: %T", result) } err = provider.setOicdProvider()