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)