func ApplyDefaults()

in configuration/configuration.go [1168:1244]


func ApplyDefaults(config *Configuration) {
	if config.Log.Level == "" {
		config.Log.Level = defaultLogLevel
	}
	if config.Log.Output == "" {
		config.Log.Output = defaultLogOutput
	}
	if config.Log.Formatter == "" {
		config.Log.Formatter = defaultLogFormat
	}
	if !config.Log.AccessLog.Disabled && config.Log.AccessLog.Formatter == "" {
		config.Log.AccessLog.Formatter = defaultAccessLogFormat
	}
	if config.HTTP.Debug.Prometheus.Enabled && config.HTTP.Debug.Prometheus.Path == "" {
		config.HTTP.Debug.Prometheus.Path = "/metrics"
	}
	if config.Redis.Addr != "" && config.Redis.Pool.Size == 0 {
		config.Redis.Pool.Size = 10
	}

	// If no custom cipher suites are specified in the configuration,
	// default to a secure set of TLS 1.2 cipher suites. TLS 1.3 cipher
	// suites are automatically enabled in Go and do not need explicit
	// configuration.
	if len(config.HTTP.TLS.CipherSuites) == 0 {
		config.HTTP.TLS.CipherSuites = defaultCipherSuites()
	}

	// copy TLS config to debug server when enabled and debug TLS certificate is empty
	if config.HTTP.Debug.TLS.Enabled {
		if config.HTTP.Debug.TLS.Certificate == "" {
			config.HTTP.Debug.TLS.Certificate = config.HTTP.TLS.Certificate
			config.HTTP.Debug.TLS.Key = config.HTTP.TLS.Key
		}
		// Only replace if the debug section is empty which allows finer configuration settings for the
		// debug server, for example allowing only certain clients to access it.
		if len(config.HTTP.Debug.TLS.ClientCAs) == 0 {
			config.HTTP.Debug.TLS.ClientCAs = config.HTTP.TLS.ClientCAs
		}
		if config.HTTP.Debug.TLS.MinimumTLS == "" {
			config.HTTP.Debug.TLS.MinimumTLS = config.HTTP.TLS.MinimumTLS
		}
	}
	if config.Database.BackgroundMigrations.Enabled && config.Database.BackgroundMigrations.JobInterval == 0 {
		config.Database.BackgroundMigrations.JobInterval = defaultBackgroundMigrationsJobInterval
	}

	// Database Load Balancing
	if config.Database.LoadBalancing.Enabled {
		if config.Database.LoadBalancing.Nameserver == "" {
			config.Database.LoadBalancing.Nameserver = defaultDLBNameserver
		}
		if config.Database.LoadBalancing.Port == 0 {
			config.Database.LoadBalancing.Port = defaultDLBPort
		}
		if config.Database.LoadBalancing.ReplicaCheckInterval == 0 {
			config.Database.LoadBalancing.ReplicaCheckInterval = defaultDLBReplicaCheckInterval
		}
	}

	// Rate limiter
	if config.RateLimiter.Enabled {
		for _, limiter := range config.RateLimiter.Limiters {
			limiter.Match.Type = strings.ToLower(limiter.Match.Type)
			if limiter.Limit.Period == "" {
				limiter.Limit.Period = "second"
				limiter.Limit.PeriodDuration = defaultRateLimiterPeriodDuration
			}
			if limiter.Action.WarnAction == "" {
				limiter.Action.WarnAction = "none"
			}
			if limiter.Action.HardAction == "" {
				limiter.Action.HardAction = "none"
			}
		}
	}
}