summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/templates/templates.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-06-21 14:36:26 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-06-21 14:36:26 -0600
commitd49f762f6d9cdc2e92e8de40f0b0e99a9d0c4fc9 (patch)
treea4003b5967027faaf0cbbb6fbd7b8407a14a508c /modules/caddyhttp/templates/templates.go
parent81a9e125b54b34d453c425dbd58a3270b9568dca (diff)
Various bug fixes and minor improvements
- Fix static responder so it doesn't replace its own headers config, and instead replaces the actual response header values - caddyhttp.ResponseRecorder type optionally buffers response - Add interface guards to ensure regexp matchers get provisioned - Use default HTTP port if one is not explicitly set - Encode middleware writes status code 200 if not written upstream - Templates and markdown only try to execute on text responses - Static file server sets Content-Type based on file extension only (this whole thing -- MIME sniffing, etc -- needs more configurability)
Diffstat (limited to 'modules/caddyhttp/templates/templates.go')
-rw-r--r--modules/caddyhttp/templates/templates.go16
1 files changed, 12 insertions, 4 deletions
diff --git a/modules/caddyhttp/templates/templates.go b/modules/caddyhttp/templates/templates.go
index c659f6b..e329e2e 100644
--- a/modules/caddyhttp/templates/templates.go
+++ b/modules/caddyhttp/templates/templates.go
@@ -6,6 +6,7 @@ import (
"io"
"net/http"
"strconv"
+ "strings"
"github.com/caddyserver/caddy"
"github.com/caddyserver/caddy/modules/caddyhttp"
@@ -37,14 +38,21 @@ func (t *Templates) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddy
buf.Reset()
defer bufPool.Put(buf)
- rr := caddyhttp.NewResponseRecorder(w, buf)
+ shouldBuf := func(status int) bool {
+ return strings.HasPrefix(w.Header().Get("Content-Type"), "text/")
+ }
+
+ rec := caddyhttp.NewResponseRecorder(w, buf, shouldBuf)
- err := next.ServeHTTP(rr, r)
+ err := next.ServeHTTP(rec, r)
if err != nil {
return err
}
+ if !rec.Buffered() {
+ return nil
+ }
- err = t.executeTemplate(rr, r)
+ err = t.executeTemplate(rec, r)
if err != nil {
return err
}
@@ -54,7 +62,7 @@ func (t *Templates) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddy
w.Header().Del("Etag") // don't know a way to quickly generate etag for dynamic content
w.Header().Del("Last-Modified") // useless for dynamic content since it's always changing
- w.WriteHeader(rr.Status())
+ w.WriteHeader(rec.Status())
io.Copy(w, buf)
return nil