diff options
Diffstat (limited to 'modules/caddyhttp/templates')
-rw-r--r-- | modules/caddyhttp/templates/templates.go | 7 | ||||
-rw-r--r-- | modules/caddyhttp/templates/tplcontext.go | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/modules/caddyhttp/templates/templates.go b/modules/caddyhttp/templates/templates.go index 33e5a70..6fed8c8 100644 --- a/modules/caddyhttp/templates/templates.go +++ b/modules/caddyhttp/templates/templates.go @@ -16,6 +16,7 @@ package templates import ( "bytes" + "errors" "fmt" "net/http" "strconv" @@ -312,6 +313,12 @@ func (t *Templates) executeTemplate(rr caddyhttp.ResponseRecorder, r *http.Reque err := ctx.executeTemplateInBuffer(r.URL.Path, rr.Buffer()) if err != nil { + // templates may return a custom HTTP error to be propagated to the client, + // otherwise for any other error we assume the template is broken + var handlerErr caddyhttp.HandlerError + if errors.As(err, &handlerErr) { + return handlerErr + } return caddyhttp.Error(http.StatusInternalServerError, err) } diff --git a/modules/caddyhttp/templates/tplcontext.go b/modules/caddyhttp/templates/tplcontext.go index 1a145a2..14ac31b 100644 --- a/modules/caddyhttp/templates/tplcontext.go +++ b/modules/caddyhttp/templates/tplcontext.go @@ -350,9 +350,8 @@ func (c TemplateContext) funcFileExists(filename string) (bool, error) { return false, nil } -// funcHTTPError returns a structured HTTP handler error. EXPERIMENTAL. -// TODO: Requires https://github.com/golang/go/issues/34201 to be fixed (Go 1.17). -// Example usage might be: `{{if not (fileExists $includeFile)}}{{httpError 404}}{{end}}` +// funcHTTPError returns a structured HTTP handler error. EXPERIMENTAL; SUBJECT TO CHANGE. +// Example usage: `{{if not (fileExists $includeFile)}}{{httpError 404}}{{end}}` func (c TemplateContext) funcHTTPError(statusCode int) (bool, error) { return false, caddyhttp.Error(statusCode, nil) } |