diff options
author | Ye Zhihao <vigilans@foxmail.com> | 2020-08-04 03:44:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-03 13:44:38 -0600 |
commit | 8b80a3201fcddda3fcf125116d33555cb385a803 (patch) | |
tree | fa1b9dcef1d2c2443cb23d47e48e313eec769dc0 /caddyconfig/httpcaddyfile/options.go | |
parent | 68529e2f9ecb6b5cb9552482d73b8337252c7f59 (diff) |
httpcaddyfile: Bring `enforce_origin` and `origins` to admin config (#3595)
* Bring `ensure_origin` and `origins` to caddyfile admin config
* Add unit test for caddyfile admin config update
* Add caddyfile adapt test for typical admin setup
* httpcaddyfile: Replace admin config error message when there's more arguments than needed
Replace d.Err() to d.ArgErr() since the latter provides similarly informative error message
Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
Diffstat (limited to 'caddyconfig/httpcaddyfile/options.go')
-rw-r--r-- | caddyconfig/httpcaddyfile/options.go | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/caddyconfig/httpcaddyfile/options.go b/caddyconfig/httpcaddyfile/options.go index f69ca3e..613bbc6 100644 --- a/caddyconfig/httpcaddyfile/options.go +++ b/caddyconfig/httpcaddyfile/options.go @@ -223,17 +223,39 @@ func parseOptSingleString(d *caddyfile.Dispenser) (interface{}, error) { } func parseOptAdmin(d *caddyfile.Dispenser) (interface{}, error) { - if d.Next() { - var listenAddress string - if !d.AllArgs(&listenAddress) { - return "", d.ArgErr() + adminCfg := new(caddy.AdminConfig) + for d.Next() { + if d.NextArg() { + listenAddress := d.Val() + if listenAddress == "off" { + adminCfg.Disabled = true + if d.Next() { // Do not accept any remaining options including block + return nil, d.Err("No more option is allowed after turning off admin config") + } + } else { + adminCfg.Listen = listenAddress + if d.NextArg() { // At most 1 arg is allowed + return nil, d.ArgErr() + } + } } - if listenAddress == "" { - listenAddress = caddy.DefaultAdminListen + for nesting := d.Nesting(); d.NextBlock(nesting); { + switch d.Val() { + case "enforce_origin": + adminCfg.EnforceOrigin = true + + case "origins": + adminCfg.Origins = d.RemainingArgs() + + default: + return nil, d.Errf("unrecognized parameter '%s'", d.Val()) + } } - return listenAddress, nil } - return "", nil + if adminCfg.Listen == "" && !adminCfg.Disabled { + adminCfg.Listen = caddy.DefaultAdminListen + } + return adminCfg, nil } func parseOptOnDemand(d *caddyfile.Dispenser) (interface{}, error) { |