providers.go raw

   1  package main
   2  
   3  import (
   4  	"fmt"
   5  
   6  	"github.com/go-acme/lego/v4/challenge"
   7  	"github.com/go-acme/lego/v4/providers/dns"
   8  )
   9  
  10  // NewDNSProvider creates a DNS challenge provider by name.
  11  // The provider will be configured using standard environment variables
  12  // as documented by lego for each provider.
  13  //
  14  // Common providers and their environment variables:
  15  //   - cloudflare: CF_API_TOKEN or CF_API_EMAIL + CF_API_KEY
  16  //   - route53: AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY + AWS_REGION
  17  //   - hetzner: HETZNER_API_KEY
  18  //   - digitalocean: DO_AUTH_TOKEN
  19  //   - google: GCE_PROJECT + GCE_SERVICE_ACCOUNT_FILE
  20  //   - namecheap: NAMECHEAP_API_USER + NAMECHEAP_API_KEY
  21  //   - godaddy: GODADDY_API_KEY + GODADDY_API_SECRET
  22  //   - ovh: OVH_ENDPOINT + OVH_APPLICATION_KEY + OVH_APPLICATION_SECRET + OVH_CONSUMER_KEY
  23  //   - vultr: VULTR_API_KEY
  24  //   - linode: LINODE_TOKEN
  25  //
  26  // See https://go-acme.github.io/lego/dns/ for full list and documentation.
  27  func NewDNSProvider(name string) (challenge.Provider, error) {
  28  	provider, err := dns.NewDNSChallengeProviderByName(name)
  29  	if err != nil {
  30  		return nil, fmt.Errorf("failed to create DNS provider '%s': %w", name, err)
  31  	}
  32  	return provider, nil
  33  }
  34  
  35  // SupportedProviders returns a list of commonly used DNS providers.
  36  // This is not exhaustive - lego supports 100+ providers.
  37  func SupportedProviders() []string {
  38  	return []string{
  39  		"cloudflare",
  40  		"route53",
  41  		"hetzner",
  42  		"digitalocean",
  43  		"google",
  44  		"namecheap",
  45  		"godaddy",
  46  		"ovh",
  47  		"vultr",
  48  		"linode",
  49  		"gandi",
  50  		"dnsimple",
  51  		"duckdns",
  52  		"azure",
  53  		"alidns",
  54  	}
  55  }
  56