initial commit
This commit is contained in:
commit
c21f569144
37 changed files with 3956 additions and 0 deletions
69
routes/box.go
Normal file
69
routes/box.go
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
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)))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue