37 lines
824 B
Go
37 lines
824 B
Go
package config
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
type Config struct {
|
|
DBDSN string
|
|
EncKey []byte
|
|
ListenAddr string
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
dsn := os.Getenv("DNS_AR_DB_DSN")
|
|
if dsn == "" {
|
|
return nil, fmt.Errorf("config: DNS_AR_DB_DSN is required")
|
|
}
|
|
rawKey := os.Getenv("DNS_AR_ENC_KEY")
|
|
if rawKey == "" {
|
|
return nil, fmt.Errorf("config: DNS_AR_ENC_KEY is required")
|
|
}
|
|
key, err := base64.StdEncoding.DecodeString(rawKey)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("config: DNS_AR_ENC_KEY must be base64: %w", err)
|
|
}
|
|
if len(key) != 32 {
|
|
return nil, fmt.Errorf("config: DNS_AR_ENC_KEY must decode to 32 bytes, got %d", len(key))
|
|
}
|
|
listen := os.Getenv("DNS_AR_LISTEN")
|
|
if listen == "" {
|
|
listen = ":8080"
|
|
}
|
|
return &Config{DBDSN: dsn, EncKey: key, ListenAddr: listen}, nil
|
|
}
|