Documentation
¶
Overview ¶
Package config reads the configuration of every command from environment variables into one typed Config, validated as a whole at startup so a command stops before doing anything with a value it cannot use (ADR 0002).
The variables, their defaults and an example are in .env.example. A secret, such as the log key, is held as a Secret: it never appears in a log line, an error message or a formatted Config.
Commands write only under Config.DataDir, the data volume, so the rest of the file system can be mounted read-only.
Index ¶
Constants ¶
const ( EnvAddr = "ARNAKOFF_ADDR" EnvLogLevel = "ARNAKOFF_LOG_LEVEL" EnvLogKey = "ARNAKOFF_LOG_KEY" EnvDataDir = "ARNAKOFF_DATA_DIR" EnvSourceACPR = "ARNAKOFF_SOURCE_ACPR" )
Environment variables read by Load.
const ( DefaultAddr = ":8100" DefaultLogLevel = "info" DefaultDataDir = "var" // DefaultSourceACPR keeps the ACPR blacklist off: its reuse licence is // still to be obtained (docs/sources.md). DefaultSourceACPR = "false" )
Defaults applied by Load to an unset variable. ARNAKOFF_LOG_KEY has none.
const MinLogKeyBytes = logging.MinKeyBytes
MinLogKeyBytes is the shortest log key Load accepts, once hex-decoded: the minimum of logging.New.
Variables ¶
var ErrInvalid = errors.New("invalid configuration")
ErrInvalid means a variable holds a value Load cannot use.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// Addr is the TCP address the HTTP API listens on, "host:port" with a
// numeric port; an empty host means every interface.
Addr string
// LogLevel is the minimum level written to the log.
LogLevel slog.Level
// LogKey is the HMAC key that pseudonymises personal data in the log.
LogKey Secret
// DataDir is the only directory the commands write to: the data
// volume. Every other path may be read-only.
DataDir string
// SourceACPR turns the ACPR blacklist on, once its reuse licence is
// obtained.
SourceACPR bool
}
Config is the configuration of every command.
func Load ¶
Load reads the configuration with lookup, such as os.LookupEnv. A variable that is set, even to an empty string, is used as is; an unset one takes its default. It returns every invalid variable at once, each wrapping ErrInvalid; an error never quotes the value of a Secret.
func (Config) SnapshotDir ¶
SnapshotDir is where the validated snapshots of the sources are stored, inside DataDir.
type Secret ¶
type Secret []byte
Secret is a configuration value that must never reach a log, an error or a response. Every fmt verb, encoding/json and log/slog write it as "[redacted]"; only Bytes gives the value.
func (Secret) MarshalText ¶
MarshalText implements encoding.TextMarshaler, which encoding/json uses.