@marcel91200 / caddy Mirror · read-only / commits / 34a25dd5
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

Add very simple markdown middleware for now

Matthew Holt committed May 23, 2019 at 14:41 UTC 34a25dd5580948ff5b83843b81e72bda1b133189
2 files changed +55
cmd/caddy2/main.go
+2
@@ -8,6 +8,8 @@ import (
8 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/caddylog"
9 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/fileserver"
10 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/headers"
11 + _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/markdown"
12 + _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/requestbody"
13 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/reverseproxy"
14 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp/rewrite"
15 _ "bitbucket.org/lightcodelabs/caddy2/modules/caddytls"
modules/caddyhttp/markdown/markdown.go new
+53
@@ -0,0 +1,53 @@
1 +package markdown
2 +
3 +import (
4 + "net/http"
5 + "strconv"
6 +
7 + "gopkg.in/russross/blackfriday.v2"
8 +
9 + "bitbucket.org/lightcodelabs/caddy2"
10 + "bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp"
11 +)
12 +
13 +func init() {
14 + caddy2.RegisterModule(caddy2.Module{
15 + Name: "http.middleware.markdown",
16 + New: func() interface{} { return new(Markdown) },
17 + })
18 +}
19 +
20 +// Markdown is a middleware for rendering a Markdown response body.
21 +type Markdown struct {
22 +}
23 +
24 +func (m Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error {
25 + mrw := &markdownResponseWriter{
26 + ResponseWriterWrapper: &caddyhttp.ResponseWriterWrapper{ResponseWriter: w},
27 + }
28 + return next.ServeHTTP(mrw, r)
29 +}
30 +
31 +type markdownResponseWriter struct {
32 + *caddyhttp.ResponseWriterWrapper
33 + statusCode int
34 + wroteHeader bool
35 +}
36 +
37 +func (mrw *markdownResponseWriter) WriteHeader(code int) {
38 + mrw.statusCode = code
39 +}
40 +
41 +func (mrw *markdownResponseWriter) Write(d []byte) (int, error) {
42 + output := blackfriday.Run(d)
43 + if !mrw.wroteHeader {
44 + mrw.Header().Set("Content-Length", strconv.Itoa(len(output)))
45 + mrw.Header().Set("Content-Type", "text/html; charset=utf-8")
46 + mrw.WriteHeader(mrw.statusCode)
47 + mrw.wroteHeader = true
48 + }
49 + return mrw.ResponseWriter.Write(output)
50 +}
51 +
52 +// Interface guard
53 +var _ caddyhttp.MiddlewareHandler = (*Markdown)(nil)