hakobox/routes/box.go
2025-04-21 17:59:57 -03:00

69 lines
1.6 KiB
Go

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)))
}