diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2019-06-21 14:36:26 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2019-06-21 14:36:26 -0600 |
commit | d49f762f6d9cdc2e92e8de40f0b0e99a9d0c4fc9 (patch) | |
tree | a4003b5967027faaf0cbbb6fbd7b8407a14a508c /modules/caddyhttp/markdown | |
parent | 81a9e125b54b34d453c425dbd58a3270b9568dca (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/markdown')
-rw-r--r-- | modules/caddyhttp/markdown/markdown.go | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/modules/caddyhttp/markdown/markdown.go b/modules/caddyhttp/markdown/markdown.go index 574039e..b2292a4 100644 --- a/modules/caddyhttp/markdown/markdown.go +++ b/modules/caddyhttp/markdown/markdown.go @@ -4,6 +4,7 @@ import ( "bytes" "net/http" "strconv" + "strings" "sync" "gopkg.in/russross/blackfriday.v2" @@ -28,12 +29,19 @@ func (m Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht 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 + } output := blackfriday.Run(buf.Bytes()) @@ -43,7 +51,7 @@ func (m Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht 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()) w.Write(output) return nil |