diff --git a/api/acme/certmagic/certmagic.go b/api/acme/certmagic/certmagic.go deleted file mode 100644 index e6b8ca32..00000000 --- a/api/acme/certmagic/certmagic.go +++ /dev/null @@ -1,68 +0,0 @@ -// Package certmagic is the ACME provider from github.com/caddyserver/certmagic -package certmagic - -import ( - "crypto/tls" - "math/rand" - "net" - "time" - - "github.com/caddyserver/certmagic" - "github.com/micro/go-micro/v3/api/acme" - "github.com/micro/go-micro/v3/logger" -) - -type certmagicProvider struct { - opts acme.Options -} - -// TODO: set self-contained options -func (c *certmagicProvider) setup() { - certmagic.DefaultACME.CA = c.opts.CA - if c.opts.ChallengeProvider != nil { - // Enabling DNS Challenge disables the other challenges - certmagic.DefaultACME.DNSProvider = c.opts.ChallengeProvider - } - if c.opts.OnDemand { - certmagic.Default.OnDemand = new(certmagic.OnDemandConfig) - } - if c.opts.Cache != nil { - // already validated by new() - certmagic.Default.Storage = c.opts.Cache.(certmagic.Storage) - } - // If multiple instances of the provider are running, inject some - // randomness so they don't collide - // RenewalWindowRatio [0.33 - 0.50) - rand.Seed(time.Now().UnixNano()) - randomRatio := float64(rand.Intn(17)+33) * 0.01 - certmagic.Default.RenewalWindowRatio = randomRatio -} - -func (c *certmagicProvider) Listen(hosts ...string) (net.Listener, error) { - c.setup() - return certmagic.Listen(hosts) -} - -func (c *certmagicProvider) TLSConfig(hosts ...string) (*tls.Config, error) { - c.setup() - return certmagic.TLS(hosts) -} - -// NewProvider returns a certmagic provider -func NewProvider(options ...acme.Option) acme.Provider { - opts := acme.DefaultOptions() - - for _, o := range options { - o(&opts) - } - - if opts.Cache != nil { - if _, ok := opts.Cache.(certmagic.Storage); !ok { - logger.Fatal("ACME: cache provided doesn't implement certmagic's Storage interface") - } - } - - return &certmagicProvider{ - opts: opts, - } -} diff --git a/api/acme/certmagic/storage.go b/api/acme/certmagic/storage.go deleted file mode 100644 index 2a79516f..00000000 --- a/api/acme/certmagic/storage.go +++ /dev/null @@ -1,147 +0,0 @@ -package certmagic - -import ( - "bytes" - "encoding/gob" - "errors" - "fmt" - "path" - "strings" - "time" - - "github.com/caddyserver/certmagic" - "github.com/micro/go-micro/v3/store" - "github.com/micro/go-micro/v3/sync" -) - -// File represents a "File" that will be stored in store.Store - the contents and last modified time -type File struct { - // last modified time - LastModified time.Time - // Contents - Contents []byte -} - -// storage is an implementation of certmagic.Storage using micro's sync.Map and store.Store interfaces. -// As certmagic storage expects a filesystem (with stat() abilities) we have to implement -// the bare minimum of metadata. -type storage struct { - lock sync.Sync - store store.Store -} - -func (s *storage) Lock(key string) error { - return s.lock.Lock(key, sync.LockTTL(10*time.Minute)) -} - -func (s *storage) Unlock(key string) error { - return s.lock.Unlock(key) -} - -func (s *storage) Store(key string, value []byte) error { - f := File{ - LastModified: time.Now(), - Contents: value, - } - buf := &bytes.Buffer{} - e := gob.NewEncoder(buf) - if err := e.Encode(f); err != nil { - return err - } - r := &store.Record{ - Key: key, - Value: buf.Bytes(), - } - return s.store.Write(r) -} - -func (s *storage) Load(key string) ([]byte, error) { - if !s.Exists(key) { - return nil, certmagic.ErrNotExist(errors.New(key + " doesn't exist")) - } - records, err := s.store.Read(key) - if err != nil { - return nil, err - } - if len(records) != 1 { - return nil, fmt.Errorf("ACME Storage: multiple records matched key %s", key) - } - b := bytes.NewBuffer(records[0].Value) - d := gob.NewDecoder(b) - var f File - err = d.Decode(&f) - if err != nil { - return nil, err - } - return f.Contents, nil -} - -func (s *storage) Delete(key string) error { - return s.store.Delete(key) -} - -func (s *storage) Exists(key string) bool { - if _, err := s.store.Read(key); err != nil { - return false - } - return true -} - -func (s *storage) List(prefix string, recursive bool) ([]string, error) { - keys, err := s.store.List() - if err != nil { - return nil, err - } - - //nolint:prealloc - var results []string - for _, k := range keys { - if strings.HasPrefix(k, prefix) { - results = append(results, k) - } - } - if recursive { - return results, nil - } - keysMap := make(map[string]bool) - for _, key := range results { - dir := strings.Split(strings.TrimPrefix(key, prefix+"/"), "/") - keysMap[dir[0]] = true - } - results = make([]string, 0) - for k := range keysMap { - results = append(results, path.Join(prefix, k)) - } - return results, nil -} - -func (s *storage) Stat(key string) (certmagic.KeyInfo, error) { - records, err := s.store.Read(key) - if err != nil { - return certmagic.KeyInfo{}, err - } - if len(records) != 1 { - return certmagic.KeyInfo{}, fmt.Errorf("ACME Storage: multiple records matched key %s", key) - } - b := bytes.NewBuffer(records[0].Value) - d := gob.NewDecoder(b) - var f File - err = d.Decode(&f) - if err != nil { - return certmagic.KeyInfo{}, err - } - return certmagic.KeyInfo{ - Key: key, - Modified: f.LastModified, - Size: int64(len(f.Contents)), - IsTerminal: false, - }, nil -} - -// NewStorage returns a certmagic.Storage backed by a go-micro/lock and go-micro/store -func NewStorage(lock sync.Sync, store store.Store) certmagic.Storage { - return &storage{ - lock: lock, - store: store, - } -} diff --git a/go.mod b/go.mod index 3fed60fc..dae50dcd 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ replace github.com/imdario/mergo => github.com/imdario/mergo v0.3.8 require ( github.com/bitly/go-simplejson v0.5.0 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect - github.com/caddyserver/certmagic v0.10.6 github.com/davecgh/go-spew v1.1.1 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/ef-ds/deque v1.0.4-0.20190904040645-54cb57c252a1 @@ -21,9 +20,7 @@ require ( github.com/gogo/protobuf v1.3.1 // indirect github.com/golang/protobuf v1.4.2 github.com/google/uuid v1.1.2 - github.com/gorilla/handlers v1.4.2 github.com/hpcloud/tail v1.0.0 - github.com/klauspost/cpuid v1.3.1 // indirect github.com/kr/pretty v0.2.0 github.com/kr/text v0.2.0 // indirect github.com/miekg/dns v1.1.27 @@ -42,5 +39,4 @@ require ( google.golang.org/grpc v1.27.0 google.golang.org/protobuf v1.25.0 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect ) diff --git a/go.sum b/go.sum index a1ea1217..d0b2484b 100644 --- a/go.sum +++ b/go.sum @@ -54,8 +54,6 @@ github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngE github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/caddyserver/certmagic v0.10.6 h1:sCya6FmfaN74oZE46kqfaFOVoROD/mF36rTQfjN7TZc= -github.com/caddyserver/certmagic v0.10.6/go.mod h1:Y8jcUBctgk/IhpAzlHKfimZNyXCkfGgRTC0orl8gROQ= github.com/cenkalti/backoff/v4 v4.0.0 h1:6VeaLF9aI+MAUQ95106HwWzYZgJJpZ4stumjj6RFYAU= github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -184,8 +182,6 @@ github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEo github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -218,10 +214,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= -github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= @@ -368,7 +360,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -548,8 +539,6 @@ gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiV gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=