From 23cc26d585bfbbe06ae8d2f46fa64956e368baac Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sun, 16 Feb 2020 22:24:20 -0700 Subject: httpcaddyfile: 'handle_errors' directive Not sure I love the name of the directive; might change it later. --- caddyconfig/httpcaddyfile/builtins.go | 44 ++++++++++++----------------------- 1 file changed, 15 insertions(+), 29 deletions(-) (limited to 'caddyconfig/httpcaddyfile/builtins.go') diff --git a/caddyconfig/httpcaddyfile/builtins.go b/caddyconfig/httpcaddyfile/builtins.go index b758c39..7ad4a20 100644 --- a/caddyconfig/httpcaddyfile/builtins.go +++ b/caddyconfig/httpcaddyfile/builtins.go @@ -35,7 +35,8 @@ func init() { RegisterHandlerDirective("redir", parseRedir) RegisterHandlerDirective("respond", parseRespond) RegisterHandlerDirective("route", parseRoute) - RegisterHandlerDirective("handle", parseHandle) + RegisterHandlerDirective("handle", parseSegmentAsSubroute) + RegisterDirective("handle_errors", parseHandleErrors) } // parseBind parses the bind directive. Syntax: @@ -235,7 +236,7 @@ func parseTLS(h Helper) ([]ConfigValue, error) { return nil, h.Errf("getting DNS provider module named '%s': %v", provName, err) } mgr.Challenges.DNSRaw = caddyconfig.JSONModuleObject(dnsProvModule.New(), "provider", provName, h.warnings) - + case "ca_root": arg := h.RemainingArgs() if len(arg) != 1 { @@ -387,36 +388,21 @@ func parseRoute(h Helper) (caddyhttp.MiddlewareHandler, error) { return sr, nil } -// parseHandle parses the route directive. func parseHandle(h Helper) (caddyhttp.MiddlewareHandler, error) { - var allResults []ConfigValue - - for h.Next() { - for nesting := h.Nesting(); h.NextBlock(nesting); { - dir := h.Val() - - dirFunc, ok := registeredDirectives[dir] - if !ok { - return nil, h.Errf("unrecognized directive: %s", dir) - } - - subHelper := h - subHelper.Dispenser = h.NewFromNextSegment() - - results, err := dirFunc(subHelper) - if err != nil { - return nil, h.Errf("parsing caddyfile tokens for '%s': %v", dir, err) - } - for _, result := range results { - result.directive = dir - allResults = append(allResults, result) - } - } + return parseSegmentAsSubroute(h) +} - return buildSubroute(allResults, h.groupCounter) +func parseHandleErrors(h Helper) ([]ConfigValue, error) { + subroute, err := parseSegmentAsSubroute(h) + if err != nil { + return nil, err } - - return nil, nil + return []ConfigValue{ + { + Class: "error_route", + Value: subroute, + }, + }, nil } var tagCounter = 0 -- cgit v1.2.3