package api import ( "net/http" ) const defaultAllowedOrigin = "http://localhost:5173" // NewRouter builds the HTTP API with setup gating, auth, and network middleware. func NewRouter(configDir string) http.Handler { app, err := newApp(configDir) if err != nil { // newApp currently always succeeds; keep signature for future. panic(err) } mux := http.NewServeMux() mux.HandleFunc("GET /health", HealthHandler) mux.HandleFunc("GET /api/v1/status", StatusHandler) mux.HandleFunc("GET /api/v1/setup/status", app.setupStatusHandler) mux.HandleFunc("POST /api/v1/setup/totp/begin", app.setupTOTPBeginHandler) mux.HandleFunc("POST /api/v1/setup/totp/verify", app.setupTOTPVerifyHandler) mux.HandleFunc("POST /api/v1/setup/network/preview", app.setupPreviewHandler) mux.HandleFunc("POST /api/v1/setup/complete", app.setupCompleteHandler) mux.HandleFunc("POST /api/v1/auth/login", app.loginHandler) mux.HandleFunc("POST /api/v1/auth/logout", app.logoutHandler) mux.HandleFunc("GET /api/v1/auth/me", app.meHandler) mux.HandleFunc("POST /api/v1/auth/reauth", app.reauthHandler) mux.HandleFunc("PUT /api/v1/me/password", app.mePasswordHandler) mux.HandleFunc("POST /api/v1/me/totp/begin", app.meTOTPBeginHandler) mux.HandleFunc("POST /api/v1/me/totp/confirm", app.meTOTPConfirmHandler) mux.HandleFunc("POST /api/v1/me/totp/disable", app.meTOTPDisableHandler) mux.HandleFunc("GET /api/v1/groups", groupsGetHandler(configDir)) mux.HandleFunc("POST /api/v1/groups", groupsUpsertHandler(configDir)) mux.HandleFunc("DELETE /api/v1/groups", groupsDeleteHandler(configDir)) mux.HandleFunc("GET /api/v1/security", securityGetHandler(configDir)) mux.HandleFunc("PUT /api/v1/security", securityPutHandler(configDir)) mux.HandleFunc("GET /api/v1/network", networkGetHandler(configDir)) mux.HandleFunc("PUT /api/v1/network", networkPutHandler(configDir)) mux.HandleFunc("GET /api/v1/users", app.usersGetHandler) mux.HandleFunc("POST /api/v1/users", app.usersCreateHandler) mux.HandleFunc("PATCH /api/v1/users", app.usersPatchHandler) mux.HandleFunc("DELETE /api/v1/users", app.usersDeleteHandler) mux.HandleFunc("GET /api/v1/nodes", app.nodesListHandler) mux.HandleFunc("POST /api/v1/nodes", app.nodesCreateHandler) mux.HandleFunc("GET /api/v1/nodes/{id}", app.nodesGetHandler) mux.HandleFunc("POST /api/v1/nodes/{id}/test-ssh", app.nodesTestSSHHandler) return app.withCORS(app.withMiddleware(mux)) }