72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
// backend/routes.go
|
|
package main
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
|
|
"scm.bstein.dev/bstein/Pegasus/backend/internal"
|
|
)
|
|
|
|
//go:embed web/dist
|
|
var webFS embed.FS
|
|
|
|
func buildRouter(um *internal.UserMap, jf jellyfinClient) http.Handler {
|
|
r := chi.NewRouter()
|
|
r.Use(corsForTus)
|
|
|
|
r.Get("/healthz", func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
_, _ = w.Write([]byte("ok"))
|
|
})
|
|
r.Get("/version", func(w http.ResponseWriter, _ *http.Request) {
|
|
writeJSON(w, map[string]any{
|
|
"version": version,
|
|
"git": git,
|
|
"built_at": builtAt,
|
|
})
|
|
})
|
|
|
|
r.Post("/api/login", loginHandler(um, jf))
|
|
r.Post("/api/logout", logoutHandler())
|
|
r.Get("/api/whoami", whoamiHandler(um))
|
|
r.Get("/api/list", listHandler(um))
|
|
r.Post("/api/rename", renameHandler(um, jf))
|
|
r.Delete("/api/file", deleteHandler(um, jf))
|
|
r.Post("/api/mkdir", mkdirHandler(um, jf))
|
|
|
|
tusHandler := newTusHandler(um, jf)
|
|
r.Route("/tus", func(rt chi.Router) {
|
|
rt.Use(sessionRequired)
|
|
rt.Post("/", tusHandler.PostFile)
|
|
rt.Head("/{id}", tusHandler.HeadFile)
|
|
rt.Patch("/{id}", tusHandler.PatchFile)
|
|
rt.Delete("/{id}", tusHandler.DelFile)
|
|
rt.Get("/{id}", tusHandler.GetFile)
|
|
})
|
|
|
|
r.Handle("/metrics", promhttp.Handler())
|
|
|
|
appFS, err := fs.Sub(webFS, "web/dist")
|
|
if err == nil {
|
|
static := http.FileServer(http.FS(appFS))
|
|
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
|
|
static.ServeHTTP(w, r)
|
|
})
|
|
r.Method("GET", "/*", http.StripPrefix("/", static))
|
|
}
|
|
|
|
r.Get("/debug/env", debugEnvHandler())
|
|
r.Get("/debug/write-test", debugWriteTestHandler(um))
|
|
|
|
r.NotFound(func(w http.ResponseWriter, r *http.Request) {
|
|
http.Error(w, "no route for "+r.Method+" "+r.URL.Path, http.StatusNotFound)
|
|
})
|
|
|
|
return debugHandler(r)
|
|
}
|