aboutsummaryrefslogtreecommitdiff
path: root/page/renderMarkdown.go
diff options
context:
space:
mode:
Diffstat (limited to 'page/renderMarkdown.go')
-rw-r--r--page/renderMarkdown.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/page/renderMarkdown.go b/page/renderMarkdown.go
new file mode 100644
index 0000000..c876169
--- /dev/null
+++ b/page/renderMarkdown.go
@@ -0,0 +1,69 @@
+package page
+
+import (
+ "bytes"
+ "errors"
+ "io/fs"
+ "net/http"
+ "path/filepath"
+)
+
+// RenderMarkdown is analogous to Render, except it spits out rendered markdown
+// as text/plain
+func RenderMarkdown(w http.ResponseWriter, r *http.Request,
+ path string, vars map[string]interface{}, statusCode int) {
+ u := getURLPath(r)
+
+ u = filepath.Join(".", u)
+
+ // Sepcifically use the specified path for the page
+ p := NewPage(path)
+
+ if vars != nil {
+ p.Vars = vars
+ }
+
+ buf := &bytes.Buffer{}
+
+ err := p.Render(buf)
+ if err != nil {
+ if errors.Is(err, fs.ErrNotExist) {
+ w.WriteHeader(http.StatusNotFound)
+ w.Header().Set("Content-type", "text/plain")
+ w.Write([]byte("Not found"))
+
+ return
+ }
+
+ Logger.Printf("%s %s path: %s rendering encountered: %s",
+ r.RemoteAddr,
+ r.Method,
+ u,
+ err)
+ w.WriteHeader(http.StatusInternalServerError)
+ w.Header().Set("Content-type", "text/plain")
+ w.Write([]byte("Internal server error"))
+
+ return
+ }
+
+ // Error was handled above
+ md, _ := p.GetMarkdown()
+
+ w.WriteHeader(statusCode)
+ w.Header().Set("Content-type", "text/plain")
+
+ _, err = w.Write([]byte(md))
+ if err != nil {
+ Logger.Printf("%s %s %d %s: while writing buf: %s",
+ r.RemoteAddr,
+ r.Method,
+ statusCode,
+ u,
+ err)
+
+ return
+ }
+
+ Logger.Printf("%s %s %d %s", r.RemoteAddr, r.Method, statusCode, u)
+}