AuthProxy: Allow disabling Auth Proxy cache (#83755)

* extract auth proxy settings

* simplify auth proxy methods

* add doc mentions
This commit is contained in:
Jo
2024-03-01 11:31:06 +01:00
committed by GitHub
parent 1cec975a66
commit 36a19bfa83
23 changed files with 145 additions and 110 deletions
+2 -34
View File
@@ -256,15 +256,7 @@ type Cfg struct {
Azure *azsettings.AzureSettings
// Auth proxy settings
AuthProxyEnabled bool
AuthProxyHeaderName string
AuthProxyHeaderProperty string
AuthProxyAutoSignUp bool
AuthProxyEnableLoginToken bool
AuthProxyWhitelist string
AuthProxyHeaders map[string]string
AuthProxyHeadersEncoded bool
AuthProxySyncTTL int
AuthProxy AuthProxySettings
// OAuth
OAuthAutoLogin bool
@@ -1197,6 +1189,7 @@ func (cfg *Cfg) parseINIFile(iniFile *ini.File) error {
cfg.handleAWSConfig()
cfg.readAzureSettings()
cfg.readAuthJWTSettings()
cfg.readAuthProxySettings()
cfg.readSessionConfig()
if err := cfg.readSmtpSettings(); err != nil {
return err
@@ -1617,31 +1610,6 @@ func readAuthSettings(iniFile *ini.File, cfg *Cfg) (err error) {
cfg.ExtendedJWTExpectAudience = authExtendedJWT.Key("expect_audience").MustString("")
cfg.ExtendedJWTExpectIssuer = authExtendedJWT.Key("expect_issuer").MustString("")
// Auth Proxy
authProxy := iniFile.Section("auth.proxy")
cfg.AuthProxyEnabled = authProxy.Key("enabled").MustBool(false)
cfg.AuthProxyHeaderName = valueAsString(authProxy, "header_name", "")
cfg.AuthProxyHeaderProperty = valueAsString(authProxy, "header_property", "")
cfg.AuthProxyAutoSignUp = authProxy.Key("auto_sign_up").MustBool(true)
cfg.AuthProxyEnableLoginToken = authProxy.Key("enable_login_token").MustBool(false)
cfg.AuthProxySyncTTL = authProxy.Key("sync_ttl").MustInt()
cfg.AuthProxyWhitelist = valueAsString(authProxy, "whitelist", "")
cfg.AuthProxyHeaders = make(map[string]string)
headers := valueAsString(authProxy, "headers", "")
for _, propertyAndHeader := range util.SplitString(headers) {
split := strings.SplitN(propertyAndHeader, ":", 2)
if len(split) == 2 {
cfg.AuthProxyHeaders[split[0]] = split[1]
}
}
cfg.AuthProxyHeadersEncoded = authProxy.Key("headers_encoded").MustBool(false)
// SSO Settings
ssoSettings := iniFile.Section("sso_settings")
cfg.SSOSettingsReloadInterval = ssoSettings.Key("reload_interval").MustDuration(1 * time.Minute)
+45
View File
@@ -0,0 +1,45 @@
package setting
import (
"strings"
"github.com/grafana/grafana/pkg/util"
)
type AuthProxySettings struct {
// Auth Proxy
Enabled bool
HeaderName string
HeaderProperty string
AutoSignUp bool
EnableLoginToken bool
Whitelist string
Headers map[string]string
HeadersEncoded bool
SyncTTL int
}
func (cfg *Cfg) readAuthProxySettings() {
authProxySettings := AuthProxySettings{}
authProxy := cfg.Raw.Section("auth.proxy")
authProxySettings.Enabled = authProxy.Key("enabled").MustBool(false)
authProxySettings.HeaderName = valueAsString(authProxy, "header_name", "")
authProxySettings.HeaderProperty = valueAsString(authProxy, "header_property", "")
authProxySettings.AutoSignUp = authProxy.Key("auto_sign_up").MustBool(true)
authProxySettings.EnableLoginToken = authProxy.Key("enable_login_token").MustBool(false)
authProxySettings.SyncTTL = authProxy.Key("sync_ttl").MustInt(15)
authProxySettings.Whitelist = valueAsString(authProxy, "whitelist", "")
authProxySettings.Headers = make(map[string]string)
headers := valueAsString(authProxy, "headers", "")
for _, propertyAndHeader := range util.SplitString(headers) {
split := strings.SplitN(propertyAndHeader, ":", 2)
if len(split) == 2 {
authProxySettings.Headers[split[0]] = split[1]
}
}
authProxySettings.HeadersEncoded = authProxy.Key("headers_encoded").MustBool(false)
cfg.AuthProxy = authProxySettings
}
+4 -3
View File
@@ -13,11 +13,12 @@ import (
"testing"
"time"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/util/osutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/ini.v1"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/util/osutil"
)
const (
@@ -274,7 +275,7 @@ func TestLoadingSettings(t *testing.T) {
})
require.Nil(t, err)
require.Equal(t, 2, cfg.AuthProxySyncTTL)
require.Equal(t, 2, cfg.AuthProxy.SyncTTL)
})
t.Run("Test reading string values from .ini file", func(t *testing.T) {