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