Web UI: setup wizard, auth pages, library browsing, player, admin, streaming, cover art

This commit is contained in:
2026-08-22 23:42:09 -05:00
parent aa29f13846
commit e0bd8bc3cb
42 changed files with 3012 additions and 8 deletions
+49
View File
@@ -0,0 +1,49 @@
// Package web implements VibeSonic's server-rendered Bootstrap 5 UI:
// setup, authentication, library browsing, playback, and admin pages.
package web
import (
"database/sql"
"log/slog"
"net/http"
"git.noroutes.net/NoRoutes/vibetunes/internal/auth"
"git.noroutes.net/NoRoutes/vibetunes/internal/config"
"git.noroutes.net/NoRoutes/vibetunes/internal/coverart"
"git.noroutes.net/NoRoutes/vibetunes/internal/scanner"
)
type Web struct {
DB *sql.DB
Config config.Config
Sessions *auth.Sessions
CSRF *auth.CSRF
Middleware *auth.Middleware
Scanner *scanner.Scanner
CoverArt *coverart.Store
Log *slog.Logger
}
// page renders a template with the standard envelope (current user, CSRF
// token, active nav item) filled in.
func (h *Web) page(w http.ResponseWriter, r *http.Request, name, active, title string, data any) {
render(w, name, PageData{
Active: active,
Title: title,
User: auth.UserFromContext(r.Context()),
CSRFToken: h.CSRF.Token(w, r),
Data: data,
})
}
func (h *Web) flash(w http.ResponseWriter, r *http.Request, name, active, title, flash, kind string, data any) {
render(w, name, PageData{
Active: active,
Title: title,
User: auth.UserFromContext(r.Context()),
CSRFToken: h.CSRF.Token(w, r),
Flash: flash,
FlashKind: kind,
Data: data,
})
}