Skip to content

Commit

Permalink
feat(dex): set logger based on argo config
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandre Gaudreault <alexandre_gaudreault@intuit.com>
  • Loading branch information
agaudreault committed Aug 20, 2024
1 parent 26b2039 commit 8acc655
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 1 deletion.
37 changes: 37 additions & 0 deletions util/dex/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package dex

import (
"fmt"
"os"

"sigs.k8s.io/yaml"

"github.com/argoproj/argo-cd/v2/common"
"github.com/argoproj/argo-cd/v2/util/settings"

log "github.com/sirupsen/logrus"
)

func GenerateDexConfigYAML(argocdSettings *settings.ArgoCDSettings, disableTls bool) ([]byte, error) {
Expand Down Expand Up @@ -38,6 +41,20 @@ func GenerateDexConfigYAML(argocdSettings *settings.ArgoCDSettings, disableTls b
}
}

if loggerCfg, found := dexCfg["logger"].(map[string]interface{}); found {
if _, found := loggerCfg["level"]; !found {
loggerCfg["level"] = slogLevelFromLogrus(os.Getenv(common.EnvLogLevel))
}
if _, found := loggerCfg["format"]; !found {
loggerCfg["format"] = os.Getenv(common.EnvLogFormat)
}
} else {
dexCfg["logger"] = map[string]interface{}{
"level": slogLevelFromLogrus(os.Getenv(common.EnvLogLevel)),
"format": os.Getenv(common.EnvLogFormat),
}
}

dexCfg["grpc"] = map[string]interface{}{
"addr": "0.0.0.0:5557",
}
Expand Down Expand Up @@ -128,3 +145,23 @@ func needsRedirectURI(connectorType string) bool {
}
return false
}

func slogLevelFromLogrus(level string) string {
logrusLevel, err := log.ParseLevel(level)
if err != nil {
return level
}

switch logrusLevel {
case log.DebugLevel, log.TraceLevel:
return "DEBUG"
case log.InfoLevel:
return "INFO"
case log.WarnLevel:
return "WARN"
case log.ErrorLevel, log.FatalLevel, log.PanicLevel:
return "ERROR"
}
// return the logrus level and let slog parse it
return level
}
91 changes: 90 additions & 1 deletion util/dex/dex_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@ import (
"github.com/stretchr/testify/require"
"sigs.k8s.io/yaml"

// "github.com/argoproj/argo-cd/common"
"github.com/argoproj/argo-cd/v2/common"
"github.com/argoproj/argo-cd/v2/util/settings"

utillog "github.com/argoproj/argo-cd/v2/util/log"
log "github.com/sirupsen/logrus"
)

const invalidURL = ":://localhost/foo/bar"
Expand Down Expand Up @@ -142,6 +145,33 @@ connectors:
nameAttr: cn
`

var goodDexConfigWithLogger = `
logger:
level: debug
other: value
connectors:
# GitHub example
- type: github
id: github
name: GitHub
config:
clientID: aabbccddeeff00112233
clientSecret: $dex.github.clientSecret
orgs:
- name: your-github-org
# GitHub enterprise example
- type: github
id: acme-github
name: Acme GitHub
config:
hostName: github.acme.example.com
clientID: abcdefghijklmnopqrst
clientSecret: $dex.acme.clientSecret
orgs:
- name: your-github-org
`

var goodSecrets = map[string]string{
"dex.github.clientSecret": "foobar",
"dex.acme.clientSecret": "barfoo",
Expand Down Expand Up @@ -272,6 +302,65 @@ func Test_GenerateDexConfig(t *testing.T) {
}
})

t.Run("Logging level", func(t *testing.T) {
s := settings.ArgoCDSettings{
URL: "http://localhost",
DexConfig: goodDexConfig,
}
t.Setenv(common.EnvLogLevel, log.WarnLevel.String())
t.Setenv(common.EnvLogFormat, utillog.JsonFormat)

config, err := GenerateDexConfigYAML(&s, false)
require.NoError(t, err)
assert.NotNil(t, config)
var dexCfg map[string]interface{}
err = yaml.Unmarshal(config, &dexCfg)
if err != nil {
panic(err.Error())
}
loggerCfg, ok := dexCfg["logger"].(map[string]interface{})
assert.True(t, ok)

level, ok := loggerCfg["level"].(string)
assert.True(t, ok)
assert.Equal(t, "WARN", level)

format, ok := loggerCfg["format"].(string)
assert.True(t, ok)
assert.Equal(t, "json", format)
})

t.Run("Logging level with config", func(t *testing.T) {
s := settings.ArgoCDSettings{
URL: "http://localhost",
DexConfig: goodDexConfigWithLogger,
}
t.Setenv(common.EnvLogLevel, log.WarnLevel.String())
t.Setenv(common.EnvLogFormat, utillog.JsonFormat)

config, err := GenerateDexConfigYAML(&s, false)
require.NoError(t, err)
assert.NotNil(t, config)
var dexCfg map[string]interface{}
err = yaml.Unmarshal(config, &dexCfg)
if err != nil {
panic(err.Error())
}
loggerCfg, ok := dexCfg["logger"].(map[string]interface{})
assert.True(t, ok)

level, ok := loggerCfg["level"].(string)
assert.True(t, ok)
assert.Equal(t, "debug", level)

format, ok := loggerCfg["format"].(string)
assert.True(t, ok)
assert.Equal(t, "json", format)

_, ok = loggerCfg["other"].(string)
assert.True(t, ok)
})

t.Run("Redirect config", func(t *testing.T) {
types := []string{"oidc", "saml", "microsoft", "linkedin", "gitlab", "github", "bitbucket-cloud", "openshift", "gitea", "google", "oauth"}
for _, c := range types {
Expand Down

0 comments on commit 8acc655

Please sign in to comment.