Files
zot/pkg/extensions/config/config.go
T
Andrei Aaron da426850e7 chore: update golangci-lint and fix all issues (#3575)
* chore: Update golangci-lint

Signed-off-by: Lars Francke <git@lars-francke.de>

* chore: fix all golangci-lint issues

- Remove deprecated `// +build` tags
- Fix godoclint, modernize, wsl_v5, govet, lll, gci, noctx issues
- Update linter configuration
- Modernize code to use Go 1.22+ features (for range N, slices.Contains, etc.)
- Update make check lint the privileged tests

Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>

---------

Signed-off-by: Lars Francke <git@lars-francke.de>
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>
Co-authored-by: Lars Francke <git@lars-francke.de>
2025-11-22 23:36:48 +02:00

247 lines
5.7 KiB
Go

package config
import (
"time"
"zotregistry.dev/zot/v2/pkg/extensions/config/events"
"zotregistry.dev/zot/v2/pkg/extensions/config/sync"
)
// BaseConfig has params applicable to all extensions.
type BaseConfig struct {
Enable *bool `mapstructure:",omitempty"`
}
type ExtensionConfig struct {
Search *SearchConfig
Sync *sync.Config
Metrics *MetricsConfig
Scrub *ScrubConfig
Lint *LintConfig
UI *UIConfig
Mgmt *MgmtConfig
APIKey *APIKeyConfig
Trust *ImageTrustConfig
Events *events.Config
}
type ImageTrustConfig struct {
BaseConfig `mapstructure:",squash"`
Cosign bool
Notation bool
}
type APIKeyConfig struct {
BaseConfig `mapstructure:",squash"`
}
type MgmtConfig struct {
BaseConfig `mapstructure:",squash"`
}
type LintConfig struct {
BaseConfig `mapstructure:",squash"`
MandatoryAnnotations []string
}
type SearchConfig struct {
BaseConfig `mapstructure:",squash"`
CVE *CVEConfig
}
type CVEConfig struct {
UpdateInterval time.Duration // should be 2 hours or more, if not specified default be kept as 2 hours
Trivy *TrivyConfig
}
type TrivyConfig struct {
DBRepository string // default is "ghcr.io/aquasecurity/trivy-db"
JavaDBRepository string // default is "ghcr.io/aquasecurity/trivy-java-db"
}
type MetricsConfig struct {
BaseConfig `mapstructure:",squash"`
Prometheus *PrometheusConfig
}
type PrometheusConfig struct {
Path string // default is "/metrics"
}
type ScrubConfig struct {
BaseConfig `mapstructure:",squash"`
Interval time.Duration
}
type UIConfig struct {
BaseConfig `mapstructure:",squash"`
}
// isSearchEnabledInternal checks if search is enabled (internal use only).
func (e *ExtensionConfig) isSearchEnabledInternal() bool {
return e != nil && e.Search != nil && e.Search.Enable != nil && *e.Search.Enable
}
// isUIEnabledInternal checks if UI is enabled (internal use only).
func (e *ExtensionConfig) isUIEnabledInternal() bool {
return e != nil && e.UI != nil && e.UI.Enable != nil && *e.UI.Enable
}
// IsCveScanningEnabled checks if CVE scanning is enabled in this extensions config.
func (e *ExtensionConfig) IsCveScanningEnabled() bool {
if e == nil {
return false
}
return e.Search != nil && e.Search.Enable != nil && *e.Search.Enable &&
e.Search.CVE != nil && e.Search.CVE.Trivy != nil
}
// IsEventRecorderEnabled checks if event recording is enabled in this extensions config.
func (e *ExtensionConfig) IsEventRecorderEnabled() bool {
if e == nil {
return false
}
return e.Events != nil && e.Events.Enable != nil && *e.Events.Enable
}
// IsSearchEnabled checks if search is enabled in this extensions config.
func (e *ExtensionConfig) IsSearchEnabled() bool {
return e.isSearchEnabledInternal()
}
// IsSyncEnabled checks if sync is enabled in this extensions config.
func (e *ExtensionConfig) IsSyncEnabled() bool {
if e == nil {
return false
}
// Sync is enabled if either:
// 1. Explicitly enabled (Enable == true), OR
// 2. There are registries configured (enabled by default when registries exist)
// This matches the behavior in root.go where Sync.Enable defaults to true when registries are present
return e.Sync != nil && ((e.Sync.Enable != nil && *e.Sync.Enable) || len(e.Sync.Registries) > 0)
}
// IsScrubEnabled checks if scrub is enabled in this extensions config.
func (e *ExtensionConfig) IsScrubEnabled() bool {
if e == nil {
return false
}
return e.Scrub != nil && e.Scrub.Enable != nil && *e.Scrub.Enable
}
// IsMetricsEnabled checks if metrics are enabled in this extensions config.
func (e *ExtensionConfig) IsMetricsEnabled() bool {
if e == nil {
return false
}
return e.Metrics != nil && e.Metrics.Enable != nil && *e.Metrics.Enable
}
// IsCosignEnabled checks if Cosign is enabled in this extensions config.
func (e *ExtensionConfig) IsCosignEnabled() bool {
if e == nil {
return false
}
return e.Trust != nil && e.Trust.Enable != nil && *e.Trust.Enable && e.Trust.Cosign
}
// IsNotationEnabled checks if Notation is enabled in this extensions config.
func (e *ExtensionConfig) IsNotationEnabled() bool {
if e == nil {
return false
}
return e.Trust != nil && e.Trust.Enable != nil && *e.Trust.Enable && e.Trust.Notation
}
// IsImageTrustEnabled checks if image trust is enabled in this extensions config.
func (e *ExtensionConfig) IsImageTrustEnabled() bool {
if e == nil {
return false
}
return e.Trust != nil && e.Trust.Enable != nil && *e.Trust.Enable
}
// IsUIEnabled checks if UI is enabled in this extensions config.
func (e *ExtensionConfig) IsUIEnabled() bool {
return e.isUIEnabledInternal()
}
// AreUserPrefsEnabled checks if user preferences are enabled in this extensions config.
func (e *ExtensionConfig) AreUserPrefsEnabled() bool {
if e == nil {
return false
}
return e.isSearchEnabledInternal() && e.isUIEnabledInternal()
}
// GetSearchCVEConfig returns the search CVE config.
func (e *ExtensionConfig) GetSearchCVEConfig() *CVEConfig {
if e == nil {
return nil
}
if e.Search != nil {
return e.Search.CVE
}
return nil
}
// GetScrubInterval returns the scrub interval.
func (e *ExtensionConfig) GetScrubInterval() time.Duration {
if e == nil {
return 0
}
if e.Scrub != nil {
return e.Scrub.Interval
}
return 0
}
// GetSyncConfig returns the sync config.
func (e *ExtensionConfig) GetSyncConfig() *sync.Config {
if e == nil {
return nil
}
return e.Sync
}
// GetMetricsPrometheusConfig returns the metrics prometheus config.
func (e *ExtensionConfig) GetMetricsPrometheusConfig() *PrometheusConfig {
if e == nil {
return nil
}
if e.Metrics != nil {
return e.Metrics.Prometheus
}
return nil
}
// GetEventsConfig returns the events config.
func (e *ExtensionConfig) GetEventsConfig() *events.Config {
if e == nil {
return nil
}
return e.Events
}