Implementation of certmagic as an ACME provider

This commit is contained in:
Jake Sanders
2019-10-11 16:25:15 +01:00
parent 9bd96d4cc1
commit 723c17fdd7
4 changed files with 150 additions and 1 deletions

View File

@@ -0,0 +1,42 @@
// Package certmagic is the ACME provider from github.com/mholt/certmagic
package certmagic
import (
"net"
"github.com/mholt/certmagic"
"github.com/micro/go-micro/api/server/acme"
)
type certmagicProvider struct {
opts *acme.Options
}
func (c *certmagicProvider) NewListener(ACMEHosts ...string) (net.Listener, error) {
if c.opts.ChallengeProvider != nil {
// Enabling DNS Challenge disables the other challenges
certmagic.Default.DNSProvider = c.opts.ChallengeProvider
}
if c.opts.OnDemand {
certmagic.Default.OnDemand = new(certmagic.OnDemandConfig)
}
return certmagic.Listen(ACMEHosts)
}
// New returns a certmagic provider
func New(options ...acme.Option) acme.Provider {
o := &acme.Options{}
if len(options) == 0 {
for _, op := range acme.Default() {
op(o)
}
} else {
for _, op := range options {
op(o)
}
}
return &certmagicProvider{
opts: o,
}
}

View File

@@ -0,0 +1,37 @@
package certmagic
import (
"testing"
"github.com/go-acme/lego/v3/providers/dns/cloudflare"
"github.com/micro/go-micro/api/server/acme"
)
func TestCertMagic(t *testing.T) {
l, err := New().NewListener()
if err != nil {
t.Error(err.Error())
}
l.Close()
c := cloudflare.NewDefaultConfig()
c.AuthEmail = ""
c.AuthKey = ""
c.AuthToken = "test"
c.ZoneToken = "test"
p, err := cloudflare.NewDNSProviderConfig(c)
if err != nil {
t.Error(err.Error())
}
l, err = New(acme.AcceptTLS(true),
acme.CA(acme.LetsEncryptStagingCA),
acme.ChallengeProvider(p),
).NewListener()
if err != nil {
t.Error(err.Error())
}
l.Close()
}