You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.5 KiB
108 lines
2.5 KiB
package common
|
|
|
|
import (
|
|
"strings"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/session"
|
|
"io/fs"
|
|
"path/filepath"
|
|
"fmt"
|
|
)
|
|
|
|
var STORE *session.Store
|
|
|
|
func GenPageId(path string) string {
|
|
return strings.ReplaceAll(path, "/", "-") + "-page"
|
|
}
|
|
|
|
func AddAuthedPage(app *fiber.App, must_admin bool, url string, view string) {
|
|
handler := func(c *fiber.Ctx) error {
|
|
_, err := AuthCheck(c, must_admin)
|
|
if err != nil { return c.Redirect("/") }
|
|
params := c.AllParams()
|
|
params["PageId"] = GenPageId(url)
|
|
|
|
return c.Render(view, params)
|
|
}
|
|
|
|
app.Get(url, handler)
|
|
}
|
|
|
|
func AddPage(app *fiber.App, url string, view string) {
|
|
handler := func(c *fiber.Ctx) error {
|
|
params := c.AllParams()
|
|
params["PageId"] = GenPageId(url)
|
|
|
|
return c.Render(view, c.AllParams())
|
|
}
|
|
|
|
app.Get(url, handler)
|
|
}
|
|
|
|
func Page(path string) (func(c *fiber.Ctx) error) {
|
|
page_id := GenPageId(path)
|
|
|
|
return func (c *fiber.Ctx) error {
|
|
return c.Render(path, fiber.Map{"PageId": page_id})
|
|
}
|
|
}
|
|
|
|
func SplitRouteTemplate(path string) (string, string) {
|
|
path = filepath.ToSlash(filepath.Clean(path))
|
|
path, found := strings.CutPrefix(path, "views/")
|
|
if !found {
|
|
fmt.Println("no views/ prefix?", path)
|
|
}
|
|
|
|
ext := filepath.Ext(path)
|
|
source_name, _ := strings.CutSuffix(path, ext)
|
|
split_path := strings.Split(source_name, "/")
|
|
|
|
var route string
|
|
page := strings.Join(split_path, "/")
|
|
last := split_path[len(split_path) - 1]
|
|
|
|
if last == "index" {
|
|
// it's an index.html so route doesn't include it
|
|
// WARN: page already has the leading /
|
|
route = fmt.Sprintf("/%s/", filepath.Dir(page))
|
|
} else {
|
|
route = fmt.Sprintf("/%s", page)
|
|
}
|
|
|
|
return route, page
|
|
}
|
|
|
|
func ConfigViews(app *fiber.App, path string) error {
|
|
route_map := make(map[string]string, 10)
|
|
|
|
for _, route := range app.GetRoutes() {
|
|
if route.Method == "GET" {
|
|
route_map[route.Path] = route.Method
|
|
}
|
|
}
|
|
|
|
err := filepath.WalkDir(path,
|
|
func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil { return err }
|
|
|
|
if !d.IsDir() && strings.HasSuffix(path, "html") {
|
|
route, page := SplitRouteTemplate(path)
|
|
_, exists := route_map[route]
|
|
|
|
if exists {
|
|
fmt.Println("ROUTE ", route, "Already exists, skipping", page)
|
|
} else {
|
|
fmt.Println("ROUTE ", route, "does not conflict page", page)
|
|
AddPage(app, route, page)
|
|
|
|
// update the route map to avoid dupes
|
|
route_map[route] = "GET"
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
|
|
return err
|
|
}
|
|
|