MCPcopy
hub / github.com/caddyserver/caddy / makeClient

Method makeClient

modules/caddypki/acmeserver/acmeserver.go:307–353  ·  view source on GitHub ↗

makeClient creates an ACME client which will use a custom resolver instead of net.DefaultResolver.

()

Source from the content-addressed store, hash-verified

305// makeClient creates an ACME client which will use a custom
306// resolver instead of net.DefaultResolver.
307func (ash Handler) makeClient() (acme.Client, error) {
308 // If no local resolvers are configured, check for global resolvers from TLS app
309 resolversToUse := ash.Resolvers
310 if len(resolversToUse) == 0 {
311 tlsAppIface, err := ash.ctx.App("tls")
312 if err == nil {
313 tlsApp := tlsAppIface.(*caddytls.TLS)
314 if len(tlsApp.Resolvers) > 0 {
315 resolversToUse = tlsApp.Resolvers
316 }
317 }
318 }
319
320 for _, v := range resolversToUse {
321 addr, err := caddy.ParseNetworkAddressWithDefaults(v, "udp", 53)
322 if err != nil {
323 return nil, err
324 }
325 if addr.PortRangeSize() != 1 {
326 return nil, fmt.Errorf("resolver address must have exactly one address; cannot call %v", addr)
327 }
328 ash.resolvers = append(ash.resolvers, addr)
329 }
330
331 var resolver *net.Resolver
332 if len(ash.resolvers) != 0 {
333 dialer := &net.Dialer{
334 Timeout: 2 * time.Second,
335 }
336 resolver = &net.Resolver{
337 PreferGo: true,
338 Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
339 //nolint:gosec
340 addr := ash.resolvers[weakrand.IntN(len(ash.resolvers))]
341 return dialer.DialContext(ctx, addr.Network, addr.JoinHostPort(0))
342 },
343 }
344 } else {
345 resolver = net.DefaultResolver
346 }
347
348 return resolverClient{
349 Client: acme.NewClient(),
350 resolver: resolver,
351 ctx: ash.ctx,
352 }, nil
353}
354
355type resolverClient struct {
356 acme.Client

Callers 1

ProvisionMethod · 0.95

Calls 3

AppMethod · 0.80
PortRangeSizeMethod · 0.80
JoinHostPortMethod · 0.80

Tested by

no test coverage detected