package routes import ( "html/template" "net/http" "shelves/backend/httpx" "strings" "shelves" ) func html(w http.ResponseWriter, s template.HTML) { w.Header().Add("Content-Type", "text/html") w.Write([]byte(s)) } func redirectSetup(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := httpx.GetCtx(r) if ctx.NeedsOwnerSetup && !strings.HasPrefix(r.URL.Path, "/static") { if r.URL.Path != "/setup" { httpx.SeeOther(w, "/setup") return } } next.ServeHTTP(w, r) }) } func Routes() http.Handler { mux := http.NewServeMux() mux.Handle("GET /static/", http.StripPrefix("/static/", http.FileServerFS(shelves.Frontend))) mux.HandleFunc("GET /{$}", HomeGet) mux.HandleFunc("GET /setup", SetupGet) mux.HandleFunc("POST /setup", SetupPost) mux.HandleFunc("GET /login", LoginGet) mux.HandleFunc("POST /login", LoginPost) mux.HandleFunc("DELETE /login", LoginDelete) return redirectSetup(mux) }