88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"nebula/views"
|
|
)
|
|
|
|
func RegisterRoutes(mux *http.ServeMux) {
|
|
mux.HandleFunc("GET /", handleWelcome)
|
|
mux.HandleFunc("GET /welcome", handleWelcome)
|
|
mux.HandleFunc("GET /welcome/step/{step}", handleWelcomeStep)
|
|
|
|
mux.HandleFunc("GET /register", handleRegister)
|
|
mux.HandleFunc("GET /register/step/{step}", handleRegisterStep)
|
|
mux.HandleFunc("GET /register/capabilities", handleRegisterCapabilities)
|
|
mux.HandleFunc("POST /register/verify-code", handleRegisterVerifyCode)
|
|
}
|
|
|
|
// handleWelcome renders the full welcome page at step 1
|
|
func handleWelcome(w http.ResponseWriter, r *http.Request) {
|
|
views.WelcomePage(1).Render(r.Context(), w)
|
|
}
|
|
|
|
// handleWelcomeStep handles HTMX partial updates for step navigation
|
|
func handleWelcomeStep(w http.ResponseWriter, r *http.Request) {
|
|
stepStr := r.PathValue("step")
|
|
step, err := strconv.Atoi(stepStr)
|
|
if err != nil || step < 1 || step > 3 {
|
|
step = 1
|
|
}
|
|
|
|
// Check if this is an HTMX request
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
// Return step content with OOB stepper update (HTMX 4 pattern)
|
|
views.WelcomeStepWithStepper(step).Render(r.Context(), w)
|
|
return
|
|
}
|
|
|
|
views.WelcomePage(step).Render(r.Context(), w)
|
|
}
|
|
|
|
func handleRegister(w http.ResponseWriter, r *http.Request) {
|
|
state := views.RegisterState{Step: 1}
|
|
views.RegisterPage(state).Render(r.Context(), w)
|
|
}
|
|
|
|
func handleRegisterStep(w http.ResponseWriter, r *http.Request) {
|
|
stepStr := r.PathValue("step")
|
|
step, err := strconv.Atoi(stepStr)
|
|
if err != nil || step < 1 || step > 3 {
|
|
step = 1
|
|
}
|
|
|
|
method := r.URL.Query().Get("method")
|
|
if method == "" {
|
|
method = "passkey"
|
|
}
|
|
|
|
state := views.RegisterState{Step: step, Method: method}
|
|
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
views.RegisterStepWithStepper(state).Render(r.Context(), w)
|
|
return
|
|
}
|
|
|
|
views.RegisterPage(state).Render(r.Context(), w)
|
|
}
|
|
|
|
func handleRegisterCapabilities(w http.ResponseWriter, r *http.Request) {
|
|
caps := views.DeviceCapabilities{
|
|
Platform: true,
|
|
CrossPlatform: true,
|
|
Conditional: true,
|
|
}
|
|
views.CapabilitiesResult(caps).Render(r.Context(), w)
|
|
}
|
|
|
|
func handleRegisterVerifyCode(w http.ResponseWriter, r *http.Request) {
|
|
state := views.RegisterState{Step: 3}
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
views.RegisterStepWithStepper(state).Render(r.Context(), w)
|
|
return
|
|
}
|
|
views.RegisterPage(state).Render(r.Context(), w)
|
|
}
|