Documentation
¶
Overview ¶
Package config provides configuration loading and validation for the proxy server.
Configuration can be provided via:
- Command line flags (highest priority)
- Environment variables (PROXY_ prefix)
- Configuration file (YAML or JSON)
Storage Configuration:
The proxy supports multiple storage backends via gocloud.dev/blob:
Local filesystem (default):
storage: url: "file:///var/cache/proxy"
Amazon S3:
storage: url: "s3://bucket-name"
S3-compatible (MinIO, etc.):
storage: url: "s3://bucket?endpoint=http://localhost:9000"
Google Cloud Storage:
storage: url: "gs://bucket-name"
For S3, configure credentials via AWS environment variables:
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION
For GCS, authentication uses Application Default Credentials. This supports GKE Workload Identity, attached service accounts on GCE and Cloud Run, and local credentials created by `gcloud auth application-default login`. When direct_serve is enabled without a private key, the GCS backend uses the IAM Credentials signBlob API. The service account must hold roles/iam.serviceAccountTokenCreator on itself.
Database Configuration:
The proxy supports two database backends:
SQLite (default):
database: driver: "sqlite" path: "/var/lib/proxy/cache.db"
PostgreSQL:
database: driver: "postgres" url: "postgres://user:password@localhost:5432/proxy?sslmode=disable"
See config.example.yaml in the repository root for a complete example.
Index ¶
- Constants
- func ParseSize(s string) (int64, error)
- type AccessLogConfig
- type AuthConfig
- type Config
- func (c *Config) LoadFromEnv()
- func (c *Config) ParseDirectServeTTL() time.Duration
- func (c *Config) ParseGradleBuildCacheMaxAge() time.Duration
- func (c *Config) ParseGradleBuildCacheMaxSize() int64
- func (c *Config) ParseGradleBuildCacheMaxUploadSize() int64
- func (c *Config) ParseGradleBuildCacheSweepInterval() time.Duration
- func (c *Config) ParseHTTPTimeout() time.Duration
- func (c *Config) ParseMaxSize() int64
- func (c *Config) ParseMetadataMaxSize() int64
- func (c *Config) ParseMetadataTTL() time.Duration
- func (c *Config) Validate() error
- type CooldownConfig
- type DatabaseConfig
- type GradleBuildCacheConfig
- type GradleConfig
- type HealthConfig
- type LogConfig
- type ScannerConfig
- type ScanningConfig
- type StorageConfig
- type UpstreamConfig
Constants ¶
const DefaultSwiftUpstream = "https://tuist.dev/api/registry/swift"
DefaultSwiftUpstream is the Swift Package Registry used when none is configured.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AccessLogConfig ¶ added in v0.8.0
type AccessLogConfig struct {
// Path is the file to append activity records to. Empty disables the access log.
Path string `json:"path" yaml:"path"`
}
AccessLogConfig configures the JSONL activity log.
type AuthConfig ¶
type AuthConfig struct {
// Type is the authentication type: "bearer", "basic", "header", or "ecr".
Type string `json:"type" yaml:"type"`
// Token is used for bearer authentication.
// Can reference environment variables with ${VAR_NAME} syntax.
Token string `json:"token" yaml:"token"`
// Username is used for basic authentication.
Username string `json:"username" yaml:"username"`
// Password is used for basic authentication.
// Can reference environment variables with ${VAR_NAME} syntax.
Password string `json:"password" yaml:"password"`
// HeaderName is the custom header name (for type "header").
HeaderName string `json:"header_name" yaml:"header_name"`
// HeaderValue is the custom header value (for type "header").
// Can reference environment variables with ${VAR_NAME} syntax.
HeaderValue string `json:"header_value" yaml:"header_value"`
// Region is the AWS region for ECR authentication (for type "ecr").
// If empty, the region is inferred from private ECR registry URLs before
// falling back to the AWS SDK default region chain.
Region string `json:"region" yaml:"region"`
}
AuthConfig configures authentication for an upstream registry.
func (*AuthConfig) Header ¶
func (a *AuthConfig) Header() (name, value string)
Header returns the HTTP header name and value for this auth config. Returns empty strings if the config is invalid or incomplete.
type Config ¶
type Config struct {
// Listen is the address to listen on (e.g., ":8080", "127.0.0.1:8080").
Listen string `json:"listen" yaml:"listen"`
// BaseURL is the public URL where package endpoints are reachable.
// Used for rewriting package metadata URLs and shown to humans on the
// install guide so they know what to point their package manager at.
// Example: "https://proxy.example.com" or "http://localhost:8080"
BaseURL string `json:"base_url" yaml:"base_url"`
// UIBaseURL is the public URL where the web UI is reachable. Defaults to
// BaseURL when unset. Set this separately when the UI is served on a
// different hostname than the package endpoints — for example, the UI on a
// public domain behind auth while build machines hit a Docker network alias
// for the package endpoints.
// Example: "https://proxy.example.com/ui"
UIBaseURL string `json:"ui_base_url" yaml:"ui_base_url"`
// Storage configures artifact storage.
Storage StorageConfig `json:"storage" yaml:"storage"`
// Database configures the cache database.
Database DatabaseConfig `json:"database" yaml:"database"`
// Log configures logging.
Log LogConfig `json:"log" yaml:"log"`
// AccessLog configures the JSONL activity log.
AccessLog AccessLogConfig `json:"access_log" yaml:"access_log"`
// Upstream configures upstream registry URLs (optional overrides).
Upstream UpstreamConfig `json:"upstream" yaml:"upstream"`
// Cooldown configures version age filtering to mitigate supply chain attacks.
Cooldown CooldownConfig `json:"cooldown" yaml:"cooldown"`
// Scanning configures pre-cache artifact scanning (trivy, ClamAV, Wiz,
// or a custom service) to mitigate supply chain attacks.
Scanning ScanningConfig `json:"scanning" yaml:"scanning"`
// CacheMetadata enables caching of upstream metadata responses for offline fallback.
// When enabled, metadata is stored in the database and storage backend.
// The mirror command always enables this regardless of this setting.
CacheMetadata bool `json:"cache_metadata" yaml:"cache_metadata"`
// MetadataTTL is how long cached metadata is considered fresh before
// revalidating with upstream. Uses Go duration syntax (e.g. "5m", "1h").
// Default: "5m". Set to "0" to always revalidate.
MetadataTTL string `json:"metadata_ttl" yaml:"metadata_ttl"`
// MetadataMaxSize is the maximum size of an upstream metadata response
// the proxy will buffer (e.g. "100MB", "250MB"). Responses over this
// size return ErrMetadataTooLarge. Default: "100MB".
MetadataMaxSize string `json:"metadata_max_size" yaml:"metadata_max_size"`
// HTTPTimeout is the timeout for individual upstream HTTP requests made
// by protocol handlers (metadata fetches, pass-through file requests).
// Uses Go duration syntax (e.g. "30s", "2m"). Default: "30s".
// Set to "0" to disable the timeout entirely.
HTTPTimeout string `json:"http_timeout" yaml:"http_timeout"`
// MirrorAPI enables the /api/mirror endpoints for starting mirror jobs via HTTP.
// Disabled by default to prevent unauthenticated users from triggering downloads.
MirrorAPI bool `json:"mirror_api" yaml:"mirror_api"`
// Gradle configures Gradle HttpBuildCache behavior.
Gradle GradleConfig `json:"gradle" yaml:"gradle"`
// Health configures the /health endpoint behavior.
Health HealthConfig `json:"health" yaml:"health"`
}
Config holds all configuration for the proxy server.
func (*Config) LoadFromEnv ¶
func (c *Config) LoadFromEnv()
LoadFromEnv applies environment variable overrides to a Config. Environment variables use the PROXY_ prefix:
- PROXY_LISTEN
- PROXY_BASE_URL
- PROXY_UI_URL
- PROXY_STORAGE_PATH
- PROXY_STORAGE_MAX_SIZE
- PROXY_DATABASE_PATH
- PROXY_LOG_LEVEL
- PROXY_LOG_FORMAT
- PROXY_ACCESS_LOG_PATH
- PROXY_UPSTREAM_SWIFT
- PROXY_HEALTH_STORAGE_PROBE_INTERVAL
func (*Config) ParseDirectServeTTL ¶
ParseDirectServeTTL returns the presigned URL expiry duration. Returns 15 minutes if unset.
func (*Config) ParseGradleBuildCacheMaxAge ¶ added in v0.4.0
ParseGradleBuildCacheMaxAge returns age-based eviction threshold. Returns 0 when disabled or invalid.
func (*Config) ParseGradleBuildCacheMaxSize ¶ added in v0.4.0
ParseGradleBuildCacheMaxSize returns total-size cap in bytes. Returns 0 when disabled or invalid.
func (*Config) ParseGradleBuildCacheMaxUploadSize ¶ added in v0.4.0
ParseGradleBuildCacheMaxUploadSize returns the max accepted PUT body size. Defaults to 100MB if unset or invalid.
func (*Config) ParseGradleBuildCacheSweepInterval ¶ added in v0.4.0
ParseGradleBuildCacheSweepInterval returns eviction sweep cadence. Defaults to 10m if unset or invalid.
func (*Config) ParseHTTPTimeout ¶ added in v0.6.0
ParseHTTPTimeout returns the upstream HTTP client timeout. Returns 30s if unset, 0 (no timeout) if explicitly set to "0".
func (*Config) ParseMaxSize ¶
ParseMaxSize returns the maximum cache size in bytes. Returns 0 if unset or explicitly disabled (meaning unlimited).
func (*Config) ParseMetadataMaxSize ¶ added in v0.5.0
ParseMetadataMaxSize returns the maximum metadata response size in bytes. Returns 100MB if unset or invalid.
func (*Config) ParseMetadataTTL ¶
ParseMetadataTTL returns the metadata TTL duration. Returns 5 minutes if unset, 0 if explicitly disabled.
type CooldownConfig ¶
type CooldownConfig struct {
// Default is the global default cooldown (e.g., "3d", "48h", "0" to disable).
Default string `json:"default" yaml:"default"`
// Ecosystems overrides the default for specific ecosystems.
Ecosystems map[string]string `json:"ecosystems" yaml:"ecosystems"`
// Packages overrides the cooldown for specific packages (keyed by PURL).
// Valid PURL keys are normalized to canonical form before use.
Packages map[string]string `json:"packages" yaml:"packages"`
}
CooldownConfig configures version cooldown periods. Versions published more recently than the cooldown are hidden from metadata responses.
func (*CooldownConfig) NormalizedPackages ¶ added in v0.6.0
func (c *CooldownConfig) NormalizedPackages() map[string]string
NormalizedPackages returns a copy of the package overrides with valid PURL keys in canonical form. An explicitly canonical key wins over an equivalent noncanonical key, and invalid keys are preserved unchanged.
type DatabaseConfig ¶
type DatabaseConfig struct {
// Driver is the database driver: "sqlite" or "postgres".
Driver string `json:"driver" yaml:"driver"`
// Path is the path to the SQLite database file.
Path string `json:"path" yaml:"path"`
// URL is the PostgreSQL connection string.
URL string `json:"url" yaml:"url"`
}
DatabaseConfig configures the cache database.
func (DatabaseConfig) String ¶ added in v0.5.1
func (d DatabaseConfig) String() string
String returns a human-readable description of the configured database suitable for logging. For postgres the password in the connection URL is redacted; if the URL cannot be parsed only the driver name is returned to avoid leaking credentials.
type GradleBuildCacheConfig ¶ added in v0.4.0
type GradleBuildCacheConfig struct {
// ReadOnly disables PUT uploads and keeps cache reads (GET/HEAD) enabled.
ReadOnly bool `json:"read_only" yaml:"read_only"`
// MaxUploadSize caps a single PUT body size (e.g., "100MB"). Must be > 0.
// Default: "100MB".
MaxUploadSize string `json:"max_upload_size" yaml:"max_upload_size"`
// MaxAge evicts entries older than this duration (e.g., "24h", "7d").
// Empty or "0" disables age-based eviction.
MaxAge string `json:"max_age" yaml:"max_age"`
// MaxSize evicts oldest entries until total Gradle cache size is <= MaxSize.
// Empty or "0" disables size-based eviction.
MaxSize string `json:"max_size" yaml:"max_size"`
// SweepInterval controls periodic eviction frequency.
// Default: "10m".
SweepInterval string `json:"sweep_interval" yaml:"sweep_interval"`
}
GradleBuildCacheConfig configures Gradle HttpBuildCache safeguards.
func (*GradleBuildCacheConfig) Validate ¶ added in v0.4.0
func (g *GradleBuildCacheConfig) Validate() error
Validate checks Gradle build cache settings, applying the default upload size if unset.
type GradleConfig ¶ added in v0.4.0
type GradleConfig struct {
// BuildCache configures the /gradle HttpBuildCache endpoint.
BuildCache GradleBuildCacheConfig `json:"build_cache" yaml:"build_cache"`
}
GradleConfig configures Gradle-specific features.
type HealthConfig ¶ added in v0.4.0
type HealthConfig struct {
// StorageProbeInterval is the minimum time between storage backend probes.
// Uses Go duration syntax (e.g. "30s", "1m"). Default: "30s".
// Set to "0" to probe on every /health request (useful for low-traffic deployments).
StorageProbeInterval string `json:"storage_probe_interval" yaml:"storage_probe_interval"`
}
HealthConfig configures the /health endpoint.
func (*HealthConfig) Validate ¶ added in v0.4.0
func (h *HealthConfig) Validate() error
Validate checks the /health configuration. An unset interval is allowed (the cache uses its default); explicit values must parse and be non-negative.
type LogConfig ¶
type LogConfig struct {
// Level is the minimum log level: "debug", "info", "warn", "error".
Level string `json:"level" yaml:"level"`
// Format is the log format: "text" or "json".
Format string `json:"format" yaml:"format"`
}
LogConfig configures logging.
type ScannerConfig ¶ added in v0.8.0
type ScannerConfig struct {
// Name identifies this scanner in logs and metrics.
Name string `json:"name" yaml:"name"`
// URL is the endpoint the proxy POSTs scan notifications to.
URL string `json:"url" yaml:"url"`
// Mode is "block" (default) or "monitor". A "block" scanner's verdict
// can prevent caching; a "monitor" scanner's findings are logged but
// never gate caching.
Mode string `json:"mode" yaml:"mode"`
// Ecosystems restricts this scanner to specific ecosystems (e.g.
// "npm", "pypi"). Empty means all ecosystems.
Ecosystems []string `json:"ecosystems" yaml:"ecosystems"`
// Headers are additional HTTP headers sent with every scan request
// (e.g. for authenticating to the scanner service). Values support
// ${VAR_NAME} expansion like AuthConfig fields.
Headers map[string]string `json:"headers" yaml:"headers"`
}
ScannerConfig configures a single external scanning service.
func (*ScannerConfig) HeadersExpanded ¶ added in v0.8.0
func (s *ScannerConfig) HeadersExpanded() map[string]string
HeadersExpanded returns Headers with ${VAR_NAME} references expanded in each value.
func (*ScannerConfig) Validate ¶ added in v0.8.0
func (s *ScannerConfig) Validate() error
Validate checks a single scanner's configuration, applying the default mode ("block") if unset.
type ScanningConfig ¶ added in v0.8.0
type ScanningConfig struct {
// Enabled turns on the scan gate. When false (default), artifacts are
// cached exactly as if scanning didn't exist.
Enabled bool `json:"enabled" yaml:"enabled"`
// FailOpen treats scanner errors and timeouts as an allow verdict
// instead of a block. Default is fail-closed, since the default
// posture for a security gate should block on infrastructure failure.
FailOpen bool `json:"fail_open" yaml:"fail_open"`
// Timeout bounds each scan call. Uses Go duration syntax (e.g. "30s").
// Default: "30s".
Timeout string `json:"timeout" yaml:"timeout"`
// SigningKey authenticates pull requests to the internal scan-fetch
// route used by every storage backend. Required whenever Enabled is
// true. Supports ${VAR_NAME} expansion like AuthConfig fields.
SigningKey string `json:"signing_key" yaml:"signing_key"`
// FetchBaseURL is the address scanners use to reach this proxy to pull
// staged artifacts. Defaults to BaseURL. Set this separately when
// scanners reach the proxy over an internal address different from the
// public-facing BaseURL (mirrors DirectServeBaseURL/UIBaseURL).
FetchBaseURL string `json:"fetch_base_url" yaml:"fetch_base_url"`
// Scanners is the list of external scanning services to call.
Scanners []ScannerConfig `json:"scanners" yaml:"scanners"`
}
ScanningConfig configures pre-cache artifact scanning (e.g. trivy, ClamAV, Wiz, or a custom service) to mitigate supply chain attacks. Unlike Cooldown, which only looks at a version's publish timestamp, scanning inspects the actual artifact bytes before they become servable from cache.
func (*ScanningConfig) SigningKeyExpanded ¶ added in v0.8.0
func (s *ScanningConfig) SigningKeyExpanded() string
SigningKeyExpanded returns SigningKey with ${VAR_NAME} references expanded.
func (*ScanningConfig) Validate ¶ added in v0.8.0
func (s *ScanningConfig) Validate() error
Validate checks the scanning configuration for errors, applying the default timeout if unset.
type StorageConfig ¶
type StorageConfig struct {
// URL is the storage backend URL.
// Supported schemes:
// - file:///path/to/dir - Local filesystem (default)
// - s3://bucket-name - Amazon S3
// - s3://bucket?endpoint=http://localhost:9000 - S3-compatible (MinIO)
// - gs://bucket-name - Google Cloud Storage (Workload Identity supported)
// - azblob://container-name - Azure Blob Storage
// If empty, defaults to file:// with the Path value.
URL string `json:"url" yaml:"url"`
// Path is the directory where cached artifacts are stored.
// If URL is empty, this is used as file://{Path}.
//
// Deprecated: Use URL with file:// scheme instead.
Path string `json:"path" yaml:"path"`
// MaxSize is the maximum cache size (e.g., "10GB", "500MB").
// When exceeded, least recently used artifacts are evicted.
// Empty or "0" means unlimited.
MaxSize string `json:"max_size" yaml:"max_size"`
// DirectServe enables redirecting cached artifact downloads to presigned
// storage URLs (HTTP 302) instead of streaming bytes through the proxy.
// Only effective for backends that support URL signing (S3, GCS, Azure).
DirectServe bool `json:"direct_serve" yaml:"direct_serve"`
// DirectServeTTL is how long presigned URLs remain valid.
// Uses Go duration syntax (e.g. "5m", "1h"). Default: "15m".
DirectServeTTL string `json:"direct_serve_ttl" yaml:"direct_serve_ttl"`
// DirectServeBaseURL overrides the scheme and host of presigned URLs
// before returning them to clients. Useful when the proxy reaches
// storage at an internal address (e.g. 127.0.0.1 or a Docker hostname)
// but clients must use a public one.
DirectServeBaseURL string `json:"direct_serve_base_url" yaml:"direct_serve_base_url"`
}
StorageConfig configures artifact storage.
type UpstreamConfig ¶
type UpstreamConfig struct {
// AllowPrivateHosts permits listed upstream hosts to resolve to private addresses.
AllowPrivateHosts []string `json:"allow_private_hosts" yaml:"allow_private_hosts"`
// AllowLoopback permits upstream requests and redirects to loopback addresses.
AllowLoopback bool `json:"allow_loopback" yaml:"allow_loopback"`
// NPM is the upstream npm registry URL.
// Default: https://registry.npmjs.org
NPM string `json:"npm" yaml:"npm"`
// NPMFullMetadata always requests the full packument (application/json)
// from the npm upstream, so served metadata carries the "time" map even
// when cooldown is disabled. Clients that gate on publish age (for
// example Yarn's npmMinimalAgeGate) need this.
// Default: false (the abbreviated format is preferred).
NPMFullMetadata bool `json:"npm_full_metadata" yaml:"npm_full_metadata"`
// Cargo is the upstream cargo index URL.
// Default: https://index.crates.io
Cargo string `json:"cargo" yaml:"cargo"`
// CargoDownload is the upstream cargo download URL.
// Default: https://static.crates.io/crates
CargoDownload string `json:"cargo_download" yaml:"cargo_download"`
// Gem is the upstream RubyGems registry URL.
// Default: https://rubygems.org
Gem string `json:"gem" yaml:"gem"`
// Go is the upstream Go module proxy URL.
// Default: https://proxy.golang.org
Go string `json:"go" yaml:"go"`
// Hex is the upstream Hex repository URL.
// Default: https://repo.hex.pm
Hex string `json:"hex" yaml:"hex"`
// HexAPI is the upstream Hex API URL used for package timestamps.
// Default: https://hex.pm
HexAPI string `json:"hex_api" yaml:"hex_api"`
// Pub is the upstream pub registry URL.
// Default: https://pub.dev
Pub string `json:"pub" yaml:"pub"`
// PyPI is the upstream PyPI index and API URL.
// Default: https://pypi.org
PyPI string `json:"pypi" yaml:"pypi"`
// PyPIDownload is the upstream PyPI package download URL.
// Default: https://files.pythonhosted.org
PyPIDownload string `json:"pypi_download" yaml:"pypi_download"`
// Maven is the upstream Maven repository URL.
// Default: https://repo1.maven.org/maven2
Maven string `json:"maven" yaml:"maven"`
// GradlePluginPortal is the upstream Gradle Plugin Portal Maven URL.
// Used to resolve Gradle plugin marker artifacts.
// Default: https://plugins.gradle.org/m2
GradlePluginPortal string `json:"gradle_plugin_portal" yaml:"gradle_plugin_portal"`
// NuGet is the upstream NuGet API URL.
// Default: https://api.nuget.org
NuGet string `json:"nuget" yaml:"nuget"`
// NuGetSearch is the upstream NuGet search API URL.
// Default: https://azuresearch-usnc.nuget.org
NuGetSearch string `json:"nuget_search" yaml:"nuget_search"`
// Composer is the upstream Packagist API URL.
// Default: https://packagist.org
Composer string `json:"composer" yaml:"composer"`
// ComposerRepository is the upstream Packagist repository URL.
// Default: https://repo.packagist.org
ComposerRepository string `json:"composer_repository" yaml:"composer_repository"`
// Conan is the upstream Conan registry URL.
// Default: https://center.conan.io
Conan string `json:"conan" yaml:"conan"`
// Conda is the upstream Conda channel base URL.
// Default: https://conda.anaconda.org
Conda string `json:"conda" yaml:"conda"`
// CRAN is the upstream CRAN mirror URL.
// Default: https://cloud.r-project.org
CRAN string `json:"cran" yaml:"cran"`
// Julia is the upstream Julia package server URL.
// Default: https://pkg.julialang.org
Julia string `json:"julia" yaml:"julia"`
// OCIDefault is the default upstream OCI registry URL.
// Default: https://registry-1.docker.io
OCIDefault string `json:"oci_default" yaml:"oci_default"`
// Swift is the upstream Swift Package Registry URL.
// Default: https://tuist.dev/api/registry/swift
Swift string `json:"swift" yaml:"swift"`
// Debian is the upstream APT repository base URL.
// Example: http://archive.ubuntu.com/ubuntu would get Ubuntu.
// Default: http://deb.debian.org/debian
Debian string `json:"debian" yaml:"debian"`
// RPM is the upstream RPM repository base URL.
// Default: https://dl.fedoraproject.org/pub/fedora/linux
RPM string `json:"rpm" yaml:"rpm"`
// HomebrewAPI is the upstream Homebrew JSON API URL.
// Default: https://formulae.brew.sh/api
HomebrewAPI string `json:"homebrew_api" yaml:"homebrew_api"`
// HomebrewArtifact is the upstream registry URL for Homebrew artifacts.
// Default: https://ghcr.io
HomebrewArtifact string `json:"homebrew_artifact" yaml:"homebrew_artifact"`
// Helm maps repository names to HTTP Helm chart repository URLs.
// Requests use /helm/{name}/index.yaml and chart URLs in the index are
// rewritten to the same named proxy endpoint.
Helm map[string]string `json:"helm" yaml:"helm"`
// APK maps repository names to Alpine APK repository base URLs, served
// at /apk/{name}/. The remaining request path mirrors the upstream
// layout, e.g. /apk/alpine/v3.22/main/x86_64/APKINDEX.tar.gz.
// Default when empty: {"alpine": "https://dl-cdn.alpinelinux.org/alpine"}.
APK map[string]string `json:"apk" yaml:"apk"`
// OCI maps names to OCI registry URLs. Requests to a named registry use
// the repository prefix upstream/{name}/, for example
// oci://proxy.example.com/upstream/ghcr/owner/chart.
OCI map[string]string `json:"oci" yaml:"oci"`
// Generic maps names to plain HTTP upstream base URLs, served at
// /generic/{name}/. The remaining request path and query string are
// appended to the upstream URL. GitHub release asset paths
// ({owner}/{repo}/releases/download/{tag}/{asset}) are cached in the
// artifact cache; everything else goes through the metadata cache.
// Example: {"github": "https://github.com", "github-api": "https://api.github.com"}.
Generic map[string]string `json:"generic" yaml:"generic"`
// Auth configures authentication for upstream registries.
// Keys are absolute URL scopes matched by scheme, host, effective port,
// and path-segment prefix.
// Example: "https://npm.pkg.github.com" matches all requests to that host.
Auth map[string]AuthConfig `json:"auth" yaml:"auth"`
}
UpstreamConfig configures upstream URLs for built-in routes and authentication. Leave empty to use defaults.
func (*UpstreamConfig) AuthForURL ¶
func (u *UpstreamConfig) AuthForURL(url string) *AuthConfig
AuthForURL returns the auth config that matches the given URL. The longest matching URL scope wins.
func (*UpstreamConfig) Validate ¶ added in v0.7.0
func (u *UpstreamConfig) Validate() error
Validate checks upstream authentication URL scopes.