|
|
|
@ -89,6 +89,8 @@ var ( |
|
|
|
|
EmailCodeValidMinutes int |
|
|
|
|
DataProxyWhiteList map[string]bool |
|
|
|
|
DisableBruteForceLoginProtection bool |
|
|
|
|
CookieSecure bool |
|
|
|
|
CookieSameSite http.SameSite |
|
|
|
|
|
|
|
|
|
// Snapshots
|
|
|
|
|
ExternalSnapshotUrl string |
|
|
|
@ -118,8 +120,10 @@ var ( |
|
|
|
|
ViewersCanEdit bool |
|
|
|
|
|
|
|
|
|
// Http auth
|
|
|
|
|
AdminUser string |
|
|
|
|
AdminPassword string |
|
|
|
|
AdminUser string |
|
|
|
|
AdminPassword string |
|
|
|
|
LoginCookieName string |
|
|
|
|
LoginMaxLifetimeDays int |
|
|
|
|
|
|
|
|
|
AnonymousEnabled bool |
|
|
|
|
AnonymousOrgName string |
|
|
|
@ -215,7 +219,11 @@ type Cfg struct { |
|
|
|
|
RendererLimit int |
|
|
|
|
RendererLimitAlerting int |
|
|
|
|
|
|
|
|
|
// Security
|
|
|
|
|
DisableBruteForceLoginProtection bool |
|
|
|
|
CookieSecure bool |
|
|
|
|
CookieSameSite http.SameSite |
|
|
|
|
|
|
|
|
|
TempDataLifetime time.Duration |
|
|
|
|
MetricsEndpointEnabled bool |
|
|
|
|
MetricsEndpointBasicAuthUsername string |
|
|
|
@ -224,13 +232,12 @@ type Cfg struct { |
|
|
|
|
DisableSanitizeHtml bool |
|
|
|
|
EnterpriseLicensePath string |
|
|
|
|
|
|
|
|
|
LoginCookieName string |
|
|
|
|
LoginCookieMaxDays int |
|
|
|
|
LoginCookieRotation int |
|
|
|
|
LoginDeleteExpiredTokensAfterDays int |
|
|
|
|
LoginCookieSameSite http.SameSite |
|
|
|
|
|
|
|
|
|
SecurityHTTPSCookies bool |
|
|
|
|
// Auth
|
|
|
|
|
LoginCookieName string |
|
|
|
|
LoginMaxInactiveLifetimeDays int |
|
|
|
|
LoginMaxLifetimeDays int |
|
|
|
|
TokenRotationIntervalMinutes int |
|
|
|
|
ExpiredTokensCleanupIntervalDays int |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type CommandLineArgs struct { |
|
|
|
@ -554,30 +561,6 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error { |
|
|
|
|
ApplicationName = APP_NAME_ENTERPRISE |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//login
|
|
|
|
|
login := iniFile.Section("login") |
|
|
|
|
cfg.LoginCookieName = login.Key("cookie_name").MustString("grafana_session") |
|
|
|
|
cfg.LoginCookieMaxDays = login.Key("login_remember_days").MustInt(7) |
|
|
|
|
cfg.LoginDeleteExpiredTokensAfterDays = login.Key("delete_expired_token_after_days").MustInt(30) |
|
|
|
|
|
|
|
|
|
samesiteString := login.Key("cookie_samesite").MustString("lax") |
|
|
|
|
validSameSiteValues := map[string]http.SameSite{ |
|
|
|
|
"lax": http.SameSiteLaxMode, |
|
|
|
|
"strict": http.SameSiteStrictMode, |
|
|
|
|
"none": http.SameSiteDefaultMode, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if samesite, ok := validSameSiteValues[samesiteString]; ok { |
|
|
|
|
cfg.LoginCookieSameSite = samesite |
|
|
|
|
} else { |
|
|
|
|
cfg.LoginCookieSameSite = http.SameSiteLaxMode |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cfg.LoginCookieRotation = login.Key("rotate_token_minutes").MustInt(10) |
|
|
|
|
if cfg.LoginCookieRotation < 2 { |
|
|
|
|
cfg.LoginCookieRotation = 2 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Env = iniFile.Section("").Key("app_mode").MustString("development") |
|
|
|
|
InstanceName = iniFile.Section("").Key("instance_name").MustString("unknown_instance_name") |
|
|
|
|
PluginsPath = makeAbsolute(iniFile.Section("paths").Key("plugins").String(), HomePath) |
|
|
|
@ -621,9 +604,26 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error { |
|
|
|
|
SecretKey = security.Key("secret_key").String() |
|
|
|
|
DisableGravatar = security.Key("disable_gravatar").MustBool(true) |
|
|
|
|
cfg.DisableBruteForceLoginProtection = security.Key("disable_brute_force_login_protection").MustBool(false) |
|
|
|
|
cfg.SecurityHTTPSCookies = security.Key("https_flag_cookies").MustBool(false) |
|
|
|
|
DisableBruteForceLoginProtection = cfg.DisableBruteForceLoginProtection |
|
|
|
|
|
|
|
|
|
CookieSecure = security.Key("cookie_secure").MustBool(false) |
|
|
|
|
cfg.CookieSecure = CookieSecure |
|
|
|
|
|
|
|
|
|
samesiteString := security.Key("cookie_samesite").MustString("lax") |
|
|
|
|
validSameSiteValues := map[string]http.SameSite{ |
|
|
|
|
"lax": http.SameSiteLaxMode, |
|
|
|
|
"strict": http.SameSiteStrictMode, |
|
|
|
|
"none": http.SameSiteDefaultMode, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if samesite, ok := validSameSiteValues[samesiteString]; ok { |
|
|
|
|
CookieSameSite = samesite |
|
|
|
|
cfg.CookieSameSite = CookieSameSite |
|
|
|
|
} else { |
|
|
|
|
CookieSameSite = http.SameSiteLaxMode |
|
|
|
|
cfg.CookieSameSite = CookieSameSite |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// read snapshots settings
|
|
|
|
|
snapshots := iniFile.Section("snapshots") |
|
|
|
|
ExternalSnapshotUrl = snapshots.Key("external_snapshot_url").String() |
|
|
|
@ -661,6 +661,20 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error { |
|
|
|
|
|
|
|
|
|
// auth
|
|
|
|
|
auth := iniFile.Section("auth") |
|
|
|
|
|
|
|
|
|
LoginCookieName = auth.Key("login_cookie_name").MustString("grafana_session") |
|
|
|
|
cfg.LoginCookieName = LoginCookieName |
|
|
|
|
cfg.LoginMaxInactiveLifetimeDays = auth.Key("login_maximum_inactive_lifetime_days").MustInt(7) |
|
|
|
|
|
|
|
|
|
LoginMaxLifetimeDays = auth.Key("login_maximum_lifetime_days").MustInt(30) |
|
|
|
|
cfg.LoginMaxLifetimeDays = LoginMaxLifetimeDays |
|
|
|
|
|
|
|
|
|
cfg.TokenRotationIntervalMinutes = auth.Key("token_rotation_interval_minutes").MustInt(10) |
|
|
|
|
if cfg.TokenRotationIntervalMinutes < 2 { |
|
|
|
|
cfg.TokenRotationIntervalMinutes = 2 |
|
|
|
|
} |
|
|
|
|
cfg.ExpiredTokensCleanupIntervalDays = auth.Key("expired_tokens_cleanup_interval_days").MustInt(7) |
|
|
|
|
|
|
|
|
|
DisableLoginForm = auth.Key("disable_login_form").MustBool(false) |
|
|
|
|
DisableSignoutMenu = auth.Key("disable_signout_menu").MustBool(false) |
|
|
|
|
OAuthAutoLogin = auth.Key("oauth_auto_login").MustBool(false) |
|
|
|
|