aboutsummaryrefslogtreecommitdiff
path: root/cmd/parser
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/parser')
-rw-r--r--cmd/parser/main.go81
1 files changed, 79 insertions, 2 deletions
diff --git a/cmd/parser/main.go b/cmd/parser/main.go
index cc0602a..3933935 100644
--- a/cmd/parser/main.go
+++ b/cmd/parser/main.go
@@ -1,7 +1,84 @@
package main
-import "fmt"
+import (
+ "bytes"
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+ "strconv"
+
+ "github.com/joho/godotenv"
+ "github.com/yuin/goldmark"
+ "github.com/yuin/goldmark/extension"
+ "github.com/yuin/goldmark/parser"
+ "github.com/yuin/goldmark/renderer/html"
+)
+
+var mdParser goldmark.Markdown
+
+func mdServe(w http.ResponseWriter, r *http.Request) {
+ if r.Method != "POST" {
+ w.WriteHeader(405)
+ w.Write([]byte("Method Not Allowed"))
+ return
+ }
+
+ err := r.ParseForm()
+ if err != nil {
+ w.WriteHeader(500)
+ w.Write([]byte("Failed to retrieve form data"))
+ return
+ }
+
+ var buf bytes.Buffer
+
+ log.Print(r.Form)
+ md := r.PostForm.Get("raw")
+ log.Print(md)
+ err = mdParser.Convert([]byte(md), &buf)
+ if err != nil {
+ w.WriteHeader(500)
+ w.Write([]byte("Failed to compile markdown into html"))
+ return
+ }
+
+ w.Write([]byte(md))
+}
func main() {
- fmt.Printf("Markdown compiler app\n")
+ err := godotenv.Load()
+ if err != nil {
+ log.Fatal("Failed to load env")
+ }
+
+ mdParser = goldmark.New(
+ goldmark.WithExtensions(
+ extension.GFM,
+ extension.Footnote,
+ extension.Typographer,
+ ),
+ goldmark.WithParserOptions(
+ parser.WithAutoHeadingID(),
+ ),
+ goldmark.WithRendererOptions(
+ html.WithHardWraps(),
+ ),
+ )
+
+ router := http.NewServeMux()
+ router.HandleFunc("/", mdServe)
+
+ appPort, err := strconv.ParseUint(os.Getenv("parser_port"), 10, 64)
+ if err != nil {
+ appPort = 5006
+ }
+
+ srv := &http.Server{
+ Addr: fmt.Sprintf(":%d", appPort),
+ Handler: router,
+ }
+
+ err = srv.ListenAndServe()
+ log.Fatal(err)
}