diff options
-rw-r--r-- | modules/caddyhttp/matchers.go | 6 | ||||
-rw-r--r-- | modules/caddyhttp/staticresp.go | 25 |
2 files changed, 23 insertions, 8 deletions
diff --git a/modules/caddyhttp/matchers.go b/modules/caddyhttp/matchers.go index f63e48e..49fe859 100644 --- a/modules/caddyhttp/matchers.go +++ b/modules/caddyhttp/matchers.go @@ -35,7 +35,7 @@ import ( type ( // MatchHost matches requests by the Host value (case-insensitive). // - // When used in an HTTP route, + // When used in a top-level HTTP route, // [qualifying domain names](/docs/automatic-https#hostname-requirements) // may trigger [automatic HTTPS](/docs/automatic-https), which automatically // provisions and renews certificates for you. Before doing this, you @@ -55,8 +55,8 @@ type ( // - In the middle, for a globular match (`/accounts/*/info`) // // This matcher is fast, so it does not support regular expressions or - // capture groups. For slower but more capable matching, use the path_regexp - // matcher. + // capture groups. For slower but more powerful matching, use the + // path_regexp matcher. MatchPath []string // MatchPathRE matches requests by a regular expression on the URI's path. diff --git a/modules/caddyhttp/staticresp.go b/modules/caddyhttp/staticresp.go index 0ca2f43..777ecb2 100644 --- a/modules/caddyhttp/staticresp.go +++ b/modules/caddyhttp/staticresp.go @@ -54,24 +54,39 @@ func (StaticResponse) CaddyModule() caddy.ModuleInfo { // UnmarshalCaddyfile sets up the handler from Caddyfile tokens. Syntax: // -// respond [<matcher>] <status> { +// respond [<matcher>] [<status>|[<body> [<status>]] { // body <text> // close // } // +// If there is just one argument (other than the matcher), it is considered +// to be a status code if it's a valid positive integer of 3 digits. func (s *StaticResponse) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { for d.Next() { - var statusCodeStr string - if d.Args(&statusCodeStr) { - s.StatusCode = WeakString(statusCodeStr) + args := d.RemainingArgs() + switch len(args) { + case 1: + if len(args[0]) == 3 { + if num, err := strconv.Atoi(args[0]); err == nil && num > 0 { + s.StatusCode = WeakString(args[0]) + break + } + } + s.Body = args[0] + case 2: + s.Body = args[0] + s.StatusCode = WeakString(args[1]) + default: + return d.ArgErr() } + for d.NextBlock(0) { switch d.Val() { case "body": if s.Body != "" { return d.Err("body already specified") } - if !d.Args(&s.Body) { + if !d.AllArgs(&s.Body) { return d.ArgErr() } case "close": |