package routes import ( "database/sql" "errors" "foobar/database" "foobar/model" "foobar/views" "net/http" "github.com/a-h/templ" "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/html" "github.com/gomarkdown/markdown/parser" "github.com/microcosm-cc/bluemonday" ) func boxUpload(w http.ResponseWriter, r *http.Request) (templ.Component, error) { boxURL, err := GetBoxURL(r) if err != nil { return nil, err } box, err := database.SelectBox(boxURL) if err != nil { if errors.Is(err, sql.ErrNoRows) { return views.NewBox(boxURL, readmeTemplate), nil } else { return nil, err } } return views.BoxUpload(box), nil } func checkBox(w http.ResponseWriter, r *http.Request) (templ.Component, error) { boxURL, err := GetBoxURL(r) if err != nil { return nil, err } box, err := database.SelectBox(boxURL) if err != nil { if errors.Is(err, sql.ErrNoRows) { return views.Box(boxURL, []model.File{}), nil } return nil, err } boxFiles, err := database.SelectBoxFiles(box.ID()) if err != nil { return nil, err } return views.Box(boxURL, boxFiles), nil } func mdToHTML(md []byte) model.Markdown { // create markdown parser with extensions extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock p := parser.NewWithExtensions(extensions) doc := p.Parse(md) // create HTML renderer with extensions htmlFlags := html.CommonFlags | html.HrefTargetBlank opts := html.RendererOptions{Flags: htmlFlags} renderer := html.NewRenderer(opts) sanitizer := bluemonday.UGCPolicy() return model.Markdown(sanitizer.SanitizeBytes(markdown.Render(doc, renderer))) }