Documentation
¶
Overview ¶
Package config provides configuration management for apt-proxy.
Index ¶
- Constants
- Variables
- func FindConfigFile() string
- func GetAllowedModes() []string
- func GetConfigFilePaths() []string
- func IsConfigFileProvided() bool
- func ModeToInt(mode string) int
- func PrintVersion()
- func UpdateGlobalState(config *Config) error
- func ValidateConfig(config *Config) error
- type CacheConfig
- type Config
- type MirrorConfig
- type SecurityConfig
- type TLSConfig
- type YAMLConfig
Constants ¶
const ( EnvHost = "APT_PROXY_HOST" EnvPort = "APT_PROXY_PORT" EnvMode = "APT_PROXY_MODE" EnvCacheDir = "APT_PROXY_CACHEDIR" EnvDebug = "APT_PROXY_DEBUG" EnvUbuntu = "APT_PROXY_UBUNTU" EnvUbuntuPorts = "APT_PROXY_UBUNTU_PORTS" EnvDebian = "APT_PROXY_DEBIAN" EnvCentOS = "APT_PROXY_CENTOS" EnvAlpine = "APT_PROXY_ALPINE" // Cache configuration environment variables EnvCacheMaxSize = "APT_PROXY_CACHE_MAX_SIZE" EnvCacheTTL = "APT_PROXY_CACHE_TTL" EnvCacheCleanupInterval = "APT_PROXY_CACHE_CLEANUP_INTERVAL" // TLS configuration environment variables EnvTLSEnabled = "APT_PROXY_TLS_ENABLED" EnvTLSCertFile = "APT_PROXY_TLS_CERT" EnvTLSKeyFile = "APT_PROXY_TLS_KEY" // Security configuration environment variables EnvAPIKey = "APT_PROXY_API_KEY" EnvEnableAPIAuth = "APT_PROXY_ENABLE_API_AUTH" EnvAPIRateLimitPerMinute = "APT_PROXY_API_RATE_LIMIT_PER_MINUTE" // Configuration file environment variable EnvConfigFile = "APT_PROXY_CONFIG_FILE" // Upstream transport EnvUpstreamKeepAlive = "APT_PROXY_UPSTREAM_KEEP_ALIVE" // Distributions configuration (distributions.yaml) path EnvDistributionsConfig = "APT_PROXY_DISTRIBUTIONS_CONFIG" // Benchmarking EnvAsyncBenchmark = "APT_PROXY_ASYNC_BENCHMARK" // Distributions EnvDisableBuiltinDistros = "APT_PROXY_DISABLE_BUILTIN_DISTROS" )
Environment variable names for configuration
const ( DefaultHost = "0.0.0.0" DefaultPort = "3142" DefaultCacheDir = "./.aptcache" // Default cache configuration values DefaultCacheMaxSizeGB = 10 // 10 GB DefaultCacheTTLHours = 168 // 7 days DefaultCacheCleanupIntervalMin = 60 // 1 hour // Default configuration file paths (searched in order) DefaultConfigFileName = "apt-proxy.yaml" // Default async benchmark setting DefaultAsyncBenchmark = true // Enable async mirror benchmark by default for faster startup // Default API rate limit: requests per IP per minute (0 = disabled) DefaultAPIRateLimitPerMinute = 60 )
Default configuration values
const ( EnvLogLevel = "LOG_LEVEL" EnvLogFormat = "LOG_FORMAT" )
Environment variable names for logging configuration
Variables ¶
var ( Version = "dev" Commit = "unknown" Dirty = "false" )
Version information injected at build time via ldflags.
Functions ¶
func FindConfigFile ¶
func FindConfigFile() string
FindConfigFile searches for a configuration file in common locations. Returns the path to the first file found, or empty string if none found.
func GetAllowedModes ¶
func GetAllowedModes() []string
GetAllowedModes returns the list of allowed mode values
func GetConfigFilePaths ¶
func GetConfigFilePaths() []string
GetConfigFilePaths returns a slice of paths searched for configuration files. Useful for debugging and logging.
func IsConfigFileProvided ¶
func IsConfigFileProvided() bool
IsConfigFileProvided checks if a config file path was explicitly provided via CLI flag or environment variable.
func ModeToInt ¶
ModeToInt converts a validated mode string to its corresponding integer constant. This function should only be called after mode validation via configutil.ResolveEnum.
func UpdateGlobalState ¶
UpdateGlobalState updates the global state with the current configuration, including proxy mode and mirror URLs for all supported distributions. This enables components throughout the application to access configuration.
func ValidateConfig ¶
ValidateConfig performs validation on the configuration to ensure all required fields are set and valid. Returns an error if validation fails.
Types ¶
type CacheConfig ¶
type CacheConfig struct {
// MaxSize is the maximum cache size in bytes (default: 10GB)
MaxSize int64 `yaml:"max_size"`
// MaxSizeGB is an alternative way to specify max size in GB for YAML config
MaxSizeGB int64 `yaml:"max_size_gb"`
// TTL is the time-to-live for cached items (default: 7 days)
TTL time.Duration `yaml:"ttl"`
// TTLHours is an alternative way to specify TTL in hours for YAML config
TTLHours int `yaml:"ttl_hours"`
// CleanupInterval is the interval between cleanup runs (default: 1 hour)
CleanupInterval time.Duration `yaml:"cleanup_interval"`
// CleanupIntervalMin is an alternative way to specify cleanup interval in minutes for YAML config
CleanupIntervalMin int `yaml:"cleanup_interval_min"`
}
CacheConfig holds cache-specific configuration
type Config ¶
type Config struct {
Debug bool `yaml:"debug"`
CacheDir string `yaml:"cache_dir"`
Mode int `yaml:"mode"`
Listen string `yaml:"listen"`
Mirrors MirrorConfig `yaml:"mirrors"`
Cache CacheConfig `yaml:"cache"`
TLS TLSConfig `yaml:"tls"`
Security SecurityConfig `yaml:"security"`
DistributionsConfigPath string `yaml:"distributions_config"`
// UpstreamKeepAlive enables HTTP keep-alive to upstream mirrors (default true).
UpstreamKeepAlive bool `yaml:"upstream_keep_alive"`
// AsyncBenchmark enables background mirror benchmarking on startup (default true).
// Set to false to skip benchmarking and use the specified/default mirror immediately.
AsyncBenchmark bool `yaml:"async_benchmark"`
// DisableBuiltinDistros disables registration of built-in distributions (ubuntu, debian, centos, alpine).
// Useful when only custom distributions from distributions.yaml are needed.
DisableBuiltinDistros bool `yaml:"disable_builtin_distros"`
}
Config holds all application configuration
func LoadConfigFile ¶
LoadConfigFile loads configuration from a YAML file. It returns nil if the file does not exist.
func MergeConfigs ¶
MergeConfigs merges two configurations, with values from 'override' taking precedence. Zero values in 'override' do not override values in 'base'.
func ParseFlags ¶
ParseFlags parses command-line flags and returns a Config struct with all application settings. It validates the mode parameter and sets up global state. Configuration priority: CLI flag > environment variable > default value. Returns an error if flag parsing fails or if an invalid mode is specified.
func ParseFlagsWithConfigFile ¶
ParseFlagsWithConfigFile parses command-line flags and optionally loads configuration from a YAML file. Priority: CLI > ENV > Config File > Default.
type MirrorConfig ¶
type MirrorConfig struct {
Ubuntu string `yaml:"ubuntu"`
UbuntuPorts string `yaml:"ubuntu_ports"`
Debian string `yaml:"debian"`
CentOS string `yaml:"centos"`
Alpine string `yaml:"alpine"`
}
MirrorConfig holds mirror-specific configuration
type SecurityConfig ¶
type SecurityConfig struct {
// APIKey is the key required for accessing protected API endpoints.
// If empty, API authentication is disabled.
APIKey string `yaml:"api_key"`
// EnableAPIAuth enables API authentication when APIKey is set.
EnableAPIAuth bool `yaml:"enable_api_auth"`
// APIRateLimitPerMinute limits API requests per IP per minute (0 = disabled). Default 60.
APIRateLimitPerMinute int `yaml:"api_rate_limit_per_minute"`
}
SecurityConfig holds security-related configuration
type TLSConfig ¶
type TLSConfig struct {
// Enabled indicates whether TLS is enabled
Enabled bool `yaml:"enabled"`
// CertFile is the path to the TLS certificate file
CertFile string `yaml:"cert_file"`
// KeyFile is the path to the TLS private key file
KeyFile string `yaml:"key_file"`
}
TLSConfig holds TLS/HTTPS configuration
type YAMLConfig ¶
type YAMLConfig struct {
Server struct {
Host string `yaml:"host"`
Port string `yaml:"port"`
Debug bool `yaml:"debug"`
} `yaml:"server"`
Cache struct {
Dir string `yaml:"dir"`
MaxSizeGB int64 `yaml:"max_size_gb"`
TTLHours int `yaml:"ttl_hours"`
CleanupIntervalMin int `yaml:"cleanup_interval_min"`
} `yaml:"cache"`
Mirrors struct {
Ubuntu string `yaml:"ubuntu"`
UbuntuPorts string `yaml:"ubuntu_ports"`
Debian string `yaml:"debian"`
CentOS string `yaml:"centos"`
Alpine string `yaml:"alpine"`
} `yaml:"mirrors"`
TLS struct {
Enabled bool `yaml:"enabled"`
CertFile string `yaml:"cert_file"`
KeyFile string `yaml:"key_file"`
} `yaml:"tls"`
Security struct {
APIKey string `yaml:"api_key"`
EnableAPIAuth bool `yaml:"enable_api_auth"`
APIRateLimitPerMinute int `yaml:"api_rate_limit_per_minute"`
} `yaml:"security"`
Mode string `yaml:"mode"`
DistributionsConfig string `yaml:"distributions_config"`
}
YAMLConfig represents the YAML configuration file structure. It uses a more user-friendly structure that maps to the internal Config.