package main 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() { 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) }