port most routes

This commit is contained in:
orangix
2026-01-19 18:57:06 +01:00
parent 04fbc7f5f4
commit cd4a36c9f7
17 changed files with 310 additions and 213 deletions

22
utils/accepts.go Normal file
View File

@@ -0,0 +1,22 @@
package utils
import (
"net/http"
"strings"
)
func Accepts(r *http.Request, format string) bool {
format = strings.ToLower(format)
group := strings.Split(format, "/")[0] + "/*"
header := r.Header.Get("Accept")
if header == "" {
return false
}
for _, mime := range strings.Split(header, ",") {
mime = strings.ToLower(strings.TrimSpace(strings.SplitN(mime, ";", 2)[0]))
if mime == "*/*" || mime == format || mime == group {
return true
}
}
return false
}

View File

@@ -1,25 +1,38 @@
package utils
import (
"io"
"net/http"
"strconv"
"strings"
"codeberg.org/rimgo/rimgo/render"
"codeberg.org/rimgo/rimgo/static"
"github.com/gofiber/fiber/v2"
)
func RenderError(c *fiber.Ctx, code int) error {
if !strings.Contains(c.Get("Accept"), "html") && c.Params("extension") != "" {
func RenderError(w http.ResponseWriter, r *http.Request, code int) error {
if !Accepts(r, "text/html") && r.PathValue("extension") != "" {
codeStr := "generic"
if code != 0 {
codeStr = strconv.Itoa(code)
}
img, _ := ReadFile("img/error-"+codeStr+".png", static.GetFiles())
c.Set("Content-Type", "image/png")
return c.Status(code).Send(img)
w.Header().Set("Content-Type", "image/png")
w.WriteHeader(code)
file, _ := static.GetFiles().Open("img/error-" + codeStr + ".png")
defer file.Close()
_, err := io.Copy(w, file)
if err != nil {
// panic on error to avoid a loop
panic(err)
}
} else {
return c.Status(code).Render("errors/"+strconv.Itoa(code), fiber.Map{
"path": c.Path(),
w.WriteHeader(code)
err := render.Render(w, "errors/"+strconv.Itoa(code), map[string]any{
"path": r.URL.Path,
})
if err != nil {
// panic on error to avoid a loop
panic(err)
}
}
return nil
}

View File

@@ -1,15 +0,0 @@
package utils
import (
"io"
"io/fs"
)
func ReadFile(path string, fs fs.FS) ([]byte, error) {
file, err := fs.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
return io.ReadAll(file)
}

View File

@@ -2,16 +2,14 @@ package utils
import (
"net/http"
"github.com/gofiber/fiber/v2"
)
func SetHeaders(c *fiber.Ctx) {
c.Set("Referrer-Policy", "no-referrer")
c.Set("X-Content-Type-Options", "nosniff")
c.Set("X-Robots-Tag", "noindex, noimageindex, nofollow")
c.Set("Strict-Transport-Security", "max-age=31557600")
c.Set("Permissions-Policy", "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(self), geolocation=(), gyroscope=(), interest-cohort=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()")
func SetHeaders(w http.ResponseWriter) {
w.Header().Set("Referrer-Policy", "no-referrer")
w.Header().Set("X-Content-Type-Options", "nosniff")
w.Header().Set("X-Robots-Tag", "noindex, noimageindex, nofollow")
w.Header().Set("Strict-Transport-Security", "max-age=31557600")
w.Header().Set("Permissions-Policy", "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(self), geolocation=(), gyroscope=(), interest-cohort=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()")
}
func SetReqHeaders(req *http.Request) {