|
package http |
|
|
|
import ( |
|
"embed" |
|
"fmt" |
|
"html/template" |
|
"net/http" |
|
|
|
"github.com/Masterminds/sprig/v3" |
|
"github.com/gofiber/fiber/v2" |
|
fiberhtml "github.com/gofiber/template/html/v2" |
|
"github.com/microcosm-cc/bluemonday" |
|
"github.com/mudler/LocalAI/core/schema" |
|
"github.com/russross/blackfriday" |
|
) |
|
|
|
|
|
var viewsfs embed.FS |
|
|
|
func notFoundHandler(c *fiber.Ctx) error { |
|
|
|
if string(c.Context().Request.Header.ContentType()) == "application/json" || len(c.Accepts("html")) == 0 { |
|
|
|
return c.Status(fiber.StatusNotFound).JSON(schema.ErrorResponse{ |
|
Error: &schema.APIError{Message: "Resource not found", Code: fiber.StatusNotFound}, |
|
}) |
|
} else { |
|
|
|
return c.Status(fiber.StatusNotFound).Render("views/404", fiber.Map{}) |
|
} |
|
} |
|
|
|
func renderEngine() *fiberhtml.Engine { |
|
engine := fiberhtml.NewFileSystem(http.FS(viewsfs), ".html") |
|
engine.AddFuncMap(sprig.FuncMap()) |
|
engine.AddFunc("MDToHTML", markDowner) |
|
return engine |
|
} |
|
|
|
func markDowner(args ...interface{}) template.HTML { |
|
s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s", args...))) |
|
return template.HTML(bluemonday.UGCPolicy().Sanitize(string(s))) |
|
} |
|
|