nsfwapp/backend/routes.go
2026-02-23 17:00:22 +01:00

112 lines
3.8 KiB
Go

// backend\routes.go
package main
import (
"fmt"
"net/http"
)
// routes.go (package main)
func registerRoutes(mux *http.ServeMux, auth *AuthManager) *ModelStore {
// --------------------------
// 1) Public Auth Endpoints
// --------------------------
mux.HandleFunc("/api/auth/login", authLoginHandler(auth))
mux.HandleFunc("/api/auth/logout", authLogoutHandler(auth))
mux.HandleFunc("/api/auth/me", authMeHandler(auth))
// 2FA (Authenticator/TOTP)
mux.HandleFunc("/api/auth/2fa/setup", auth2FASetupHandler(auth))
mux.HandleFunc("/api/auth/2fa/enable", auth2FAEnableHandler(auth))
// mux.HandleFunc("/api/auth/2fa/disable", auth2FADisableHandler(auth))
// --------------------------
// 2) Protected API Mux
// --------------------------
api := http.NewServeMux()
api.HandleFunc("/api/cookies", cookiesHandler)
api.HandleFunc("/api/record/done/stream", handleDoneStream)
api.HandleFunc("/api/perf/stream", perfStreamHandler)
api.HandleFunc("/api/status/disk", diskStatusHandler)
api.HandleFunc("/api/autostart/state", autostartStateHandler)
api.HandleFunc("/api/autostart/state/stream", autostartStateStreamHandler)
api.HandleFunc("/api/autostart/pause", autostartPauseQuickHandler)
api.HandleFunc("/api/autostart/resume", autostartResumeHandler)
api.HandleFunc("/api/settings", recordSettingsHandler)
api.HandleFunc("/api/settings/browse", settingsBrowse)
api.HandleFunc("/api/settings/cleanup", settingsCleanupHandler)
api.HandleFunc("/api/record", startRecordingFromRequest)
api.HandleFunc("/api/record/status", recordStatus)
api.HandleFunc("/api/record/stop", recordStop)
api.HandleFunc("/api/preview", recordPreview)
api.HandleFunc("/api/preview-scrubber/", recordPreviewScrubberFrame)
api.HandleFunc("/api/preview-sprite/", recordPreviewSprite)
api.HandleFunc("/api/record/list", recordList)
api.HandleFunc("/api/record/stream", recordStream)
api.HandleFunc("/api/record/done/meta", recordDoneMeta)
api.HandleFunc("/api/record/video", recordVideo)
api.HandleFunc("/api/record/done", recordDoneList)
api.HandleFunc("/api/record/delete", recordDeleteVideo)
api.HandleFunc("/api/record/toggle-hot", recordToggleHot)
api.HandleFunc("/api/record/keep", recordKeepVideo)
api.HandleFunc("/api/record/unkeep", recordUnkeepVideo)
api.HandleFunc("/api/record/restore", recordRestoreVideo)
api.HandleFunc("/api/chaturbate/online", chaturbateOnlineHandler)
api.HandleFunc("/api/chaturbate/biocontext", chaturbateBioContextHandler)
api.HandleFunc("/api/generated/teaser", generatedTeaser)
api.HandleFunc("/api/generated/cover", generatedCover)
api.HandleFunc("/api/generated/coverinfo/list", generatedCoverInfoList)
// Tasks
api.HandleFunc("/api/tasks/generate-assets", tasksGenerateAssets)
api.HandleFunc("/api/tasks/assets/stream", assetsStream)
// --------------------------
// 3) ModelStore
// --------------------------
modelsPath, _ := resolvePathRelativeToApp("data/models_store.db")
fmt.Println("📦 Models DB:", modelsPath)
store := NewModelStore(modelsPath)
if err := store.Load(); err != nil {
fmt.Println("⚠️ models load:", err)
}
setCoverModelStore(store)
RegisterModelAPI(api, store)
setChaturbateOnlineModelStore(store)
// --------------------------
// 4) Mount Protected API
// --------------------------
// /api/auth/* ist schon public am root mux und gewinnt als längeres Pattern.
mux.Handle("/api/", requireAuth(auth, api, false))
// --------------------------
// 5) Mount Protected SPA (/)
// --------------------------
frontend, ok := makeFrontendHandler()
if ok && frontend != nil {
// allowPaths: login + assets müssen öffentlich sein, sonst Redirect-Loop
mux.Handle("/", requireAuth(auth, frontend, true,
"/login",
"/assets/",
"/favicon.ico",
"/manifest.webmanifest",
"/robots.txt",
"/service-worker.js",
))
}
return store
}