Refactor getting auth providers
continuous-integration/drone/pr Build is failing Details

This commit is contained in:
kolaente 2020-11-21 14:45:30 +01:00
parent 74e925a97a
commit 8f336c3441
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 39 additions and 30 deletions

View File

@ -17,6 +17,8 @@
package openid
import (
"code.vikunja.io/api/pkg/modules/keyvalue"
kerr "code.vikunja.io/api/pkg/modules/keyvalue/error"
"context"
"encoding/json"
"math/rand"
@ -71,17 +73,31 @@ func getKeyFromName(name string) string {
// GetAllProviders returns all configured providers
func GetAllProviders() (providers []*Provider, err error) {
rawProvider := config.AuthOpenIDProviders.Get().([]interface{})
ps, err := keyvalue.Get("openid_providers")
if err != nil && kerr.IsErrValueNotFoundForKey(err) {
rawProvider := config.AuthOpenIDProviders.Get().([]interface{})
for _, p := range rawProvider {
pi := p.(map[interface{}]interface{})
for _, p := range rawProvider {
pi := p.(map[interface{}]interface{})
provider, err := getProviderFromMap(pi)
if err != nil {
return nil, err
provider, err := getProviderFromMap(pi)
if err != nil {
return nil, err
}
providers = append(providers, provider)
k := getKeyFromName(pi["name"].(string))
err = keyvalue.Put("openid_provider_"+k, provider)
if err != nil {
return nil, err
}
}
err = keyvalue.Put("openid_providers", providers)
}
providers = append(providers, provider)
if ps != nil {
return ps.([]*Provider), nil
}
return
@ -128,19 +144,23 @@ func getProviderFromMap(pi map[interface{}]interface{}) (*Provider, error) {
}
// GetProvider retrieves a provider from keyvalue
func GetProvider(key string) (*Provider, error) {
rawProvider := config.AuthOpenIDProviders.Get().([]interface{})
for _, p := range rawProvider {
pi := p.(map[interface{}]interface{})
k := getKeyFromName(pi["name"].(string))
if k == key {
return getProviderFromMap(pi)
func GetProvider(key string) (provider *Provider, err error) {
var p interface{}
p, err = keyvalue.Get("openid_provider_" + key)
if err != nil && kerr.IsErrValueNotFoundForKey(err) {
_, err = GetAllProviders() // This will put all providers in cache
if err != nil {
return nil, err
}
p, err = keyvalue.Get("openid_provider_" + key)
}
return nil, nil
if p != nil {
return p.(*Provider), nil
}
return nil, err
}
// HandleCallback handles the auth request callback after redirecting from the provider with an auth code

View File

@ -21,8 +21,6 @@ import (
"code.vikunja.io/api/pkg/config"
"code.vikunja.io/api/pkg/modules/auth/openid"
"code.vikunja.io/api/pkg/modules/keyvalue"
kerr "code.vikunja.io/api/pkg/modules/keyvalue/error"
"code.vikunja.io/api/pkg/modules/migration/todoist"
"code.vikunja.io/api/pkg/modules/migration/wunderlist"
"code.vikunja.io/api/pkg/version"
@ -98,21 +96,12 @@ func Info(c echo.Context) error {
},
}
var providers interface{}
var err error
providers, err = keyvalue.Get("openid_providers")
if err != nil && kerr.IsErrValueNotFoundForKey(err) {
providers, err = openid.GetAllProviders()
if err != nil {
return err
}
err = keyvalue.Put("openid_providers", providers)
}
providers, err := openid.GetAllProviders()
if err != nil {
return err
}
info.AuthInfo.OpenIDConnect.Providers = providers.([]*openid.Provider)
info.AuthInfo.OpenIDConnect.Providers = providers
// Migrators
if config.MigrationWunderlistEnable.GetBool() {