diff options
author | Samuel Johnson <[email protected]> | 2025-05-03 15:12:04 -0400 |
---|---|---|
committer | Samuel Johnson <[email protected]> | 2025-05-03 15:12:04 -0400 |
commit | 005a588111e6d27b012bc923c39d97a6129f39f2 (patch) | |
tree | 69b2bf16a07bd6ebf97313e9bb9056c57d8bb88c /cmd/parser/main.go | |
parent | 46cdc7254109aaebf6e8b629cbd8ecb46c7ad21b (diff) |
Implement basic parser endpoint
Diffstat (limited to 'cmd/parser/main.go')
-rw-r--r-- | cmd/parser/main.go | 81 |
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) } |