diff --git a/context.go b/context.go index 0fa16b1..e593004 100644 --- a/context.go +++ b/context.go @@ -87,6 +87,8 @@ func (c *Context) InitContext() { DoAccessToken: os.Getenv("DO_ACCESS_TOKEN"), AwsAccessKey: os.Getenv("AWS_ACCESS_KEY"), AwsSecretKey: os.Getenv("AWS_SECRET_KEY"), + DNSimpleEmail: os.Getenv("DNSIMPLE_EMAIL"), + DNSimpleKey: os.Getenv("DNSIMPLE_KEY"), AwsRegionName: "us-east-1", } diff --git a/letsencrypt/providers.go b/letsencrypt/providers.go index 143a256..55c8a20 100644 --- a/letsencrypt/providers.go +++ b/letsencrypt/providers.go @@ -22,6 +22,10 @@ type ProviderOpts struct { AwsAccessKey string AwsSecretKey string AwsRegionName string + + // DNSimple credentials + DNSimpleEmail string + DNSimpleKey string } type DnsProvider string @@ -30,12 +34,14 @@ const ( CLOUDFLARE = DnsProvider("CloudFlare") DIGITALOCEAN = DnsProvider("DigitalOcean") ROUTE53 = DnsProvider("Route53") + DNSIMPLE = DnsProvider("DNSimple") ) var dnsProviderFactory = map[DnsProvider]interface{}{ CLOUDFLARE: makeCloudflareProvider, DIGITALOCEAN: makeDigitalOceanProvider, ROUTE53: makeRoute53Provider, + DNSIMPLE: makeDNSimpleProvider, } func getProvider(opts ProviderOpts) (lego.ChallengeProvider, error) { @@ -96,3 +102,19 @@ func makeRoute53Provider(opts ProviderOpts) (lego.ChallengeProvider, error) { } return provider, nil } + +// returns a preconfigured DNSimple lego.ChallengeProvider +func makeDNSimpleProvider(opts ProviderOpts) (lego.ChallengeProvider, error) { + if len(opts.DNSimpleEmail) == 0 { + return nil, fmt.Errorf("DNSimple Email not set") + } + if len(opts.DNSimpleKey) == 0 { + return nil, fmt.Errorf("DNSimple API key is not set") + } + + provider, err := lego.NewDNSProviderDNSimple(opts.DNSimpleEmail, opts.DNSimpleKey) + if err != nil { + return nil, err + } + return provider, nil +}