diff options
author | Matthew Holt <[email protected]> | 2021-01-05 14:39:30 -0700 |
---|---|---|
committer | Matthew Holt <[email protected]> | 2021-01-05 14:39:30 -0700 |
commit | f0216967dca12831b1aac351fc8c4bfcea148697 (patch) | |
tree | 7e444eec3fd296dd45d27a3e36897b37d2ae1b6d /caddyconfig/httpcaddyfile/options.go | |
parent | b1bec8c8992424b423db3d92101bd5b4989dcf65 (diff) | |
download | caddy-f0216967dca12831b1aac351fc8c4bfcea148697.tar.gz caddy-f0216967dca12831b1aac351fc8c4bfcea148697.zip |
caddyfile: Refactor unmarshaling of module tokens
Eliminates a fair amount of repeated code
Diffstat (limited to 'caddyconfig/httpcaddyfile/options.go')
-rw-r--r-- | caddyconfig/httpcaddyfile/options.go | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/caddyconfig/httpcaddyfile/options.go b/caddyconfig/httpcaddyfile/options.go index 5001974b6..3a3cdf68d 100644 --- a/caddyconfig/httpcaddyfile/options.go +++ b/caddyconfig/httpcaddyfile/options.go @@ -34,7 +34,7 @@ func init() { RegisterGlobalOption("storage", parseOptStorage) RegisterGlobalOption("acme_ca", parseOptSingleString) RegisterGlobalOption("acme_ca_root", parseOptSingleString) - RegisterGlobalOption("acme_dns", parseOptSingleString) + RegisterGlobalOption("acme_dns", parseOptACMEDNS) RegisterGlobalOption("acme_eab", parseOptACMEEAB) RegisterGlobalOption("cert_issuer", parseOptCertIssuer) RegisterGlobalOption("email", parseOptSingleString) @@ -165,24 +165,35 @@ func parseOptStorage(d *caddyfile.Dispenser) (interface{}, error) { if !d.Next() { // get storage module name return nil, d.ArgErr() } - modName := d.Val() - mod, err := caddy.GetModule("caddy.storage." + modName) + modID := "caddy.storage." + d.Val() + unm, err := caddyfile.UnmarshalModule(d, modID) if err != nil { - return nil, d.Errf("getting storage module '%s': %v", modName, err) + return nil, err } - unm, ok := mod.New().(caddyfile.Unmarshaler) + storage, ok := unm.(caddy.StorageConverter) if !ok { - return nil, d.Errf("storage module '%s' is not a Caddyfile unmarshaler", mod.ID) + return nil, d.Errf("module %s is not a caddy.StorageConverter", modID) + } + return storage, nil +} + +func parseOptACMEDNS(d *caddyfile.Dispenser) (interface{}, error) { + if !d.Next() { // consume option name + return nil, d.ArgErr() } - err = unm.UnmarshalCaddyfile(d.NewFromNextSegment()) + if !d.Next() { // get DNS module name + return nil, d.ArgErr() + } + modID := "dns.providers." + d.Val() + unm, err := caddyfile.UnmarshalModule(d, modID) if err != nil { return nil, err } - storage, ok := unm.(caddy.StorageConverter) + prov, ok := unm.(certmagic.ACMEDNSProvider) if !ok { - return nil, d.Errf("module %s is not a StorageConverter", mod.ID) + return nil, d.Errf("module %s (%T) is not a certmagic.ACMEDNSProvider", modID, unm) } - return storage, nil + return prov, nil } func parseOptACMEEAB(d *caddyfile.Dispenser) (interface{}, error) { @@ -220,22 +231,14 @@ func parseOptCertIssuer(d *caddyfile.Dispenser) (interface{}, error) { if !d.Next() { // get issuer module name return nil, d.ArgErr() } - modName := d.Val() - mod, err := caddy.GetModule("tls.issuance." + modName) - if err != nil { - return nil, d.Errf("getting issuer module '%s': %v", modName, err) - } - unm, ok := mod.New().(caddyfile.Unmarshaler) - if !ok { - return nil, d.Errf("issuer module '%s' is not a Caddyfile unmarshaler", mod.ID) - } - err = unm.UnmarshalCaddyfile(d.NewFromNextSegment()) + modID := "tls.issuance." + d.Val() + unm, err := caddyfile.UnmarshalModule(d, modID) if err != nil { return nil, err } iss, ok := unm.(certmagic.Issuer) if !ok { - return nil, d.Errf("module %s is not a certmagic.Issuer", mod.ID) + return nil, d.Errf("module %s (%T) is not a certmagic.Issuer", modID, unm) } return iss, nil } |