From ba29f9d41d7951bde07dc2e0d6a1471c40bb7145 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Thu, 19 Sep 2019 12:42:36 -0600 Subject: httpcaddyfile: Global storage configuration (closes #2758) --- modules/caddyhttp/encode/caddyfile.go | 2 +- modules/filestorage/filestorage.go | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 modules/filestorage/filestorage.go (limited to 'modules') diff --git a/modules/caddyhttp/encode/caddyfile.go b/modules/caddyhttp/encode/caddyfile.go index 2f0e151..4764e9b 100644 --- a/modules/caddyhttp/encode/caddyfile.go +++ b/modules/caddyhttp/encode/caddyfile.go @@ -68,7 +68,7 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { name := d.Val() mod, err := caddy.GetModule("http.encoders." + name) if err != nil { - return fmt.Errorf("getting encoder module '%s': %v", mod.Name, err) + return fmt.Errorf("getting encoder module '%s': %v", name, err) } unm, ok := mod.New().(caddyfile.Unmarshaler) if !ok { diff --git a/modules/filestorage/filestorage.go b/modules/filestorage/filestorage.go new file mode 100644 index 0000000..654dbb2 --- /dev/null +++ b/modules/filestorage/filestorage.go @@ -0,0 +1,49 @@ +package filestorage + +import ( + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" + "github.com/mholt/certmagic" +) + +func init() { + caddy.RegisterModule(FileStorage{}) +} + +// FileStorage is a certmagic.Storage wrapper for certmagic.FileStorage. +type FileStorage struct { + Root string `json:"root,omitempty"` +} + +// CaddyModule returns the Caddy module information. +func (FileStorage) CaddyModule() caddy.ModuleInfo { + return caddy.ModuleInfo{ + Name: "caddy.storage.file_system", + New: func() caddy.Module { return new(FileStorage) }, + } +} + +// CertMagicStorage converts s to a certmagic.Storage instance. +func (s FileStorage) CertMagicStorage() (certmagic.Storage, error) { + return &certmagic.FileStorage{Path: s.Root}, nil +} + +// UnmarshalCaddyfile sets up the storage module from Caddyfile tokens. +func (s *FileStorage) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + if !d.Next() { + return d.Err("expected tokens") + } + for nesting := d.Nesting(); d.NextBlock(nesting); { + if !d.NextArg() { + return d.ArgErr() + } + s.Root = d.Val() + if d.NextArg() { + return d.ArgErr() + } + } + return nil +} + +// Interface guard +var _ caddy.StorageConverter = (*FileStorage)(nil) -- cgit v1.2.3