Documentation
¶
Index ¶
- Constants
- func LoadDBMigrationConfig() (platformConfig.DatabaseConfig, error)
- func LoadPlatformTable[P any]() (*P, error)
- func RejectPlaceholder(field, value string) error
- func SecretsPath(configPath, ref string) string
- func SetIfAbsent[T any](field **T, value T)
- func UsesYAMLConfig() bool
- func ValidateServiceTokens(sa serviceauth.Config) error
- type AuthSecrets
- type CORSConfig
- type DataAccessSecrets
- type DatabaseSecrets
- type GRPCConfig
- type GRPCService
- type HTTPDefaults
- type HTTPService
- type ListenConfig
- type Loaded
- func LoadAuth() (*Loaded[*configpb.AuthConfig, *AuthSecrets], error)
- func LoadAuthFile(path string) (*Loaded[*configpb.AuthConfig, *AuthSecrets], error)
- func LoadDataAccess() (*Loaded[*configpb.DataAccessConfig, *DataAccessSecrets], error)
- func LoadDataAccessFile(path string) (*Loaded[*configpb.DataAccessConfig, *DataAccessSecrets], error)
- func LoadMigration() (*Loaded[*configpb.MigrationConfig, *MigrationSecrets], error)
- func LoadMigrationFile(path string) (*Loaded[*configpb.MigrationConfig, *MigrationSecrets], error)
- type MetricsService
- type MigrationSecrets
- type OAuthClientCredentials
- type PlatformConfig
- type RuntimeConfig
- type SecretsRoot
- type ServiceConfig
- type ServiceRoot
- type ServiceSecrets
- type SharedSecrets
- type Source
- type TokenService
Constants ¶
const ( DirEnvVar = "CONFIG_DIR" PathEnvVar = "CONFIG_PATH" // EnvVar selects the environment for both loaders: configs/environments/$ENV.toml // and configs/<service>/$ENV.yaml. EnvVar = "ENV" DefaultEnv = "development-l2" ConfigFileName = "config.yaml" )
const ( ServiceAuth = "auth" ServiceDataAccess = "data-access" // ServiceIAM is the `[services.iam]` table: the listeners of the process // `iam serve all` runs, as opposed to a service it hosts. ServiceIAM = "iam" )
const VaultPlaceholder = platformConfig.VaultPlaceholder
VaultPlaceholder and RejectPlaceholder are the platform config's; services outside pkg/ cannot import the internal package, so they reach them here.
Variables ¶
This section is empty.
Functions ¶
func LoadDBMigrationConfig ¶ added in v1.35.0
func LoadDBMigrationConfig() (platformConfig.DatabaseConfig, error)
LoadDBMigrationConfig loads the platform database config for migrations (driver + a DataSource resolved from the migration credentials), independent of any service. It is used by cmd/migrate, which connects as the migration role; running services load their DB config via Load[T] instead.
func LoadPlatformTable ¶ added in v1.105.0
LoadPlatformTable unmarshals the `[platform]` table alone into P, for a binary that reads a platform key PlatformConfig does not carry because that binary alone uses it, or that needs no service table at all. P's mapstructure tags name the keys; env overrides apply as in Load.
func RejectPlaceholder ¶ added in v1.88.1
func SecretsPath ¶ added in v1.59.0
func SetIfAbsent ¶ added in v1.64.0
func SetIfAbsent[T any](field **T, value T)
SetIfAbsent fills an optional field the file left out.
func UsesYAMLConfig ¶ added in v1.59.0
func UsesYAMLConfig() bool
func ValidateServiceTokens ¶ added in v1.105.0
func ValidateServiceTokens(sa serviceauth.Config) error
ValidateServiceTokens is what every reader of a service token pair requires of it: the current token set, and neither slot still the Vault placeholder.
Types ¶
type AuthSecrets ¶ added in v1.61.0
type CORSConfig ¶
type CORSConfig struct {
AllowedOrigins []string `mapstructure:"allowed_origins"`
AllowedMethods []string `mapstructure:"allowed_methods"`
AllowedHeaders []string `mapstructure:"allowed_headers"`
MaxAge int `mapstructure:"max_age" default:"300"`
AllowCredentials bool `mapstructure:"allow_credentials" default:"false"`
}
func (*CORSConfig) Validate ¶
func (c *CORSConfig) Validate() error
type DataAccessSecrets ¶ added in v1.61.0
type DataAccessSecrets struct {
}
type DatabaseSecrets ¶ added in v1.61.0
type GRPCConfig ¶ added in v1.10.0
type GRPCConfig struct {
// EnableReflection registers the gRPC server reflection service, which lets
// clients (grpcurl, grpcui) enumerate services, methods, and message
// schemas at runtime. Reflection is exposed as a stream RPC and is NOT
// covered by the unary service-token interceptors, so it is unauthenticated
// wherever it is on. Keep it off in production (the zero value): it leaks the
// full API surface of the auth services to anyone who can reach the port.
// Enabled in development/CI/staging config for debugging.
EnableReflection bool `mapstructure:"enable_reflection" default:"false"`
}
GRPCConfig holds platform-wide gRPC server settings shared by all services.
type GRPCService ¶
type GRPCService interface {
GRPCAddr() string
}
type HTTPDefaults ¶
type HTTPService ¶
type HTTPService interface {
HTTPAddr() string
}
type ListenConfig ¶ added in v1.66.0
type ListenConfig struct {
// GRPCAddress serves every gRPC service, grpc.health.v1 and reflection.
GRPCAddress string `mapstructure:"grpc_address"`
// HTTPAddress serves every HTTP route.
HTTPAddress string `mapstructure:"http_address"`
// MetricsAddress serves labkit's /-/metrics, /-/liveness and /-/readiness.
MetricsAddress string `mapstructure:"metrics_address"`
}
ListenConfig is the set of addresses one process listens on: at most one gRPC, one HTTP and one metrics listener, whatever it hosts. It is the value `[services.iam]` unmarshals into (see cmd/iam) and the shape every standalone service's own `*_address` keys reduce to.
func (ListenConfig) GRPCAddr ¶ added in v1.66.0
func (l ListenConfig) GRPCAddr() string
GRPCAddr, HTTPAddr and MetricsAddr make ListenConfig a GRPCService, HTTPService and MetricsService, so a config that embeds it is addressed the same way pkg/boot addresses every other service config.
func (ListenConfig) HTTPAddr ¶ added in v1.66.0
func (l ListenConfig) HTTPAddr() string
func (ListenConfig) MetricsAddr ¶ added in v1.66.0
func (l ListenConfig) MetricsAddr() string
func (ListenConfig) ValidateComplete ¶ added in v1.66.0
func (l ListenConfig) ValidateComplete() error
ValidateComplete checks a process that serves every transport: each of the three addresses must be set, well-formed and its own, since two listeners on one address fail at bind time with the address and no key to fix.
type Loaded ¶ added in v1.61.0
type Loaded[T ServiceRoot, S ServiceSecrets] struct { Config T Secrets S }
Loaded is a config file and its secrets, from the secrets file and the files the config references, parsed and validated, with the platform defaults applied. Each service package applies its own defaults when it maps the file.
func LoadAuth ¶ added in v1.61.0
func LoadAuth() (*Loaded[*configpb.AuthConfig, *AuthSecrets], error)
func LoadAuthFile ¶ added in v1.61.0
func LoadAuthFile(path string) (*Loaded[*configpb.AuthConfig, *AuthSecrets], error)
func LoadDataAccess ¶ added in v1.61.0
func LoadDataAccess() (*Loaded[*configpb.DataAccessConfig, *DataAccessSecrets], error)
func LoadDataAccessFile ¶ added in v1.61.0
func LoadDataAccessFile(path string) (*Loaded[*configpb.DataAccessConfig, *DataAccessSecrets], error)
func LoadMigration ¶ added in v1.88.0
func LoadMigration() (*Loaded[*configpb.MigrationConfig, *MigrationSecrets], error)
LoadMigration reads the file CONFIG_DIR or CONFIG_PATH names as the migrate command's root, which either service's file satisfies. There is no local file to fall back to: the command has no service name.
func LoadMigrationFile ¶ added in v1.88.0
func LoadMigrationFile(path string) (*Loaded[*configpb.MigrationConfig, *MigrationSecrets], error)
func (*Loaded[T, S]) Platform ¶ added in v1.96.0
func (l *Loaded[T, S]) Platform() (PlatformConfig, error)
Platform maps the file's platform block onto the runtime config. auth/config.FromLoaded adds CORS, which only the auth schema has.
type MetricsService ¶ added in v1.54.0
type MetricsService interface {
MetricsAddr() string
}
MetricsService is required of every service pkg/boot.Boot runs: Boot refuses to start a service whose config lacks it. An empty MetricsAddr() skips the metrics server.
type MigrationSecrets ¶ added in v1.88.0
type MigrationSecrets struct {
Database DatabaseSecrets
}
MigrationSecrets is the database block of either service's secrets file, which is all the migrate command reads.
func (*MigrationSecrets) DatabaseSecrets ¶ added in v1.88.0
func (s *MigrationSecrets) DatabaseSecrets() DatabaseSecrets
type OAuthClientCredentials ¶ added in v1.61.0
type PlatformConfig ¶ added in v1.66.0
type PlatformConfig struct {
Database platformConfig.DatabaseConfig `mapstructure:"database"`
CORS CORSConfig `mapstructure:"cors"`
HTTP HTTPDefaults `mapstructure:"http"`
GRPC GRPCConfig `mapstructure:"grpc"`
}
PlatformConfig is the `[platform]` table: settings every service in a process shares, as opposed to the per-service `[services.<name>]` tables.
func LoadPlatform ¶ added in v1.98.0
func LoadPlatform(service string) (PlatformConfig, error)
LoadPlatform maps the platform block of the file ResolveConfigPath(service) picks and validates its database config. The service section is not validated.
func (*PlatformConfig) GetDatabaseConfig ¶ added in v1.98.0
func (p *PlatformConfig) GetDatabaseConfig() platformConfig.DatabaseConfig
type RuntimeConfig ¶
type RuntimeConfig[T ServiceConfig] struct { Platform PlatformConfig Service T }
func Load ¶
func Load[T ServiceConfig](serviceName string) (*RuntimeConfig[T], error)
Load reads serviceName's `[services.<name>]` table and the `[platform]` tables from the TOML files, validated for a standalone binary.
func LoadHosted ¶ added in v1.105.0
func LoadHosted[T ServiceConfig](serviceName string) (*RuntimeConfig[T], error)
LoadHosted is Load for a table `iam serve all` hosts: the same table and checks except the service's own token (RuntimeConfig.ValidateHosted).
func (*RuntimeConfig[T]) GRPCReflectionEnabled ¶ added in v1.10.0
func (r *RuntimeConfig[T]) GRPCReflectionEnabled() bool
GRPCReflectionEnabled reports whether gRPC server reflection should be registered. It defaults to false (production-safe) and is opted into by the development/CI/staging environment config. See GRPCConfig.EnableReflection.
func (*RuntimeConfig[T]) GetDatabaseConfig ¶
func (r *RuntimeConfig[T]) GetDatabaseConfig() platformConfig.DatabaseConfig
func (*RuntimeConfig[T]) Validate ¶
func (r *RuntimeConfig[T]) Validate() error
Validate checks the config of a standalone service, its own service token included when it is a TokenService.
func (*RuntimeConfig[T]) ValidateHosted ¶ added in v1.105.0
func (r *RuntimeConfig[T]) ValidateHosted() error
ValidateHosted is Validate for a table `iam serve all` hosts: the same checks except the table's own service token, which the hosting process never reads.
type SecretsRoot ¶ added in v1.102.0
type SecretsRoot[R any] interface { ServiceRoot GetSecrets() R }
SecretsRoot is a config root whose secrets block holds references of type R: AuthSecretRefs, DataAccessSecretRefs or MigrationSecretRefs.
type ServiceConfig ¶
type ServiceConfig interface {
Validate() error
}
ServiceConfig interface all service configs must implement
type ServiceRoot ¶ added in v1.61.0
type ServiceRoot interface {
proto.Message
GetPlatform() *configpb.Platform
GetSecretsFile() string
}
ServiceRoot is a config root message: AuthConfig or DataAccessConfig for a service, MigrationConfig for the migrate command.
type ServiceSecrets ¶ added in v1.61.0
type ServiceSecrets interface {
*AuthSecrets | *DataAccessSecrets | *MigrationSecrets
DatabaseSecrets() DatabaseSecrets
}
ServiceSecrets is a secrets file held as secret.Secret values, which print and marshal as [REDACTED]: AuthSecrets or DataAccessSecrets for a service, MigrationSecrets for the migrate command. The generated message prints every field, so it never leaves this package.
type SharedSecrets ¶ added in v1.61.0
type SharedSecrets struct {
}
func (*SharedSecrets) DatabaseSecrets ¶ added in v1.88.0
func (s *SharedSecrets) DatabaseSecrets() DatabaseSecrets
DatabaseSecrets is what pkg/config/bind reads from any secrets file.
type TokenService ¶ added in v1.105.0
type TokenService interface {
ServiceTokens() serviceauth.Config
}
TokenService is a service whose callers present a service token. Load requires one for a standalone binary and rejects the Vault placeholder. LoadHosted does not: under `iam serve all` every hosted service sits behind the process-wide `[platform]` token and the table's own is never read (see boot.BootAll).