boulder/va/config/config.go

55 lines
1.6 KiB
Go

package vacfg
import (
"fmt"
"github.com/letsencrypt/boulder/cmd"
"github.com/letsencrypt/boulder/config"
)
// Common contains all of the shared fields for a VA and a Remote VA (RVA).
type Common struct {
cmd.ServiceConfig
// UserAgent is the "User-Agent" header sent during http-01 challenges and
// DoH queries.
UserAgent string
IssuerDomain string
// DNSTries is the number of times to try a DNS query (that has a temporary error)
// before giving up. May be short-circuited by deadlines. A zero value
// will be turned into 1.
DNSTries int
DNSProvider *cmd.DNSProvider `validate:"required_without=DNSStaticResolvers"`
// DNSStaticResolvers is a list of DNS resolvers. Each entry must
// be a host or IP and port separated by a colon. IPv6 addresses
// must be enclosed in square brackets.
DNSStaticResolvers []string `validate:"required_without=DNSProvider,dive,hostname_port"`
DNSTimeout config.Duration `validate:"required"`
DNSAllowLoopbackAddresses bool
AccountURIPrefixes []string `validate:"min=1,dive,required,url"`
}
// SetDefaultsAndValidate performs some basic sanity checks on fields stored in
// the Common struct, defaulting them to a sane value when necessary. This
// method does mutate the Common struct.
func (c *Common) SetDefaultsAndValidate(grpcAddr, debugAddr *string) error {
if *grpcAddr != "" {
c.GRPC.Address = *grpcAddr
}
if *debugAddr != "" {
c.DebugAddr = *debugAddr
}
if c.DNSTimeout.Duration <= 0 {
return fmt.Errorf("'dnsTimeout' is required")
}
if c.DNSTries < 1 {
c.DNSTries = 1
}
return nil
}