package router import ( "bookhoard/internal/handlers" "github.com/labstack/echo/v5" ) func registerAuthRoutes(cfg *Config, rateLimitMiddleware echo.MiddlewareFunc) { e := cfg.Echo // Auth routes (no auth required, but rate limited) e.POST("/api/auth/register", rateLimitMiddleware(cfg.AuthHandler.Register)) e.POST("/api/auth/login", rateLimitMiddleware(cfg.AuthHandler.Login)) // JWT middleware for protected routes jwtMiddleware := createJWTMiddleware(cfg) // Create protected route group protected := e.Group("/api", jwtMiddleware) // Protected auth routes protected.GET("/auth/profile", cfg.AuthHandler.GetProfile) // Refresh token endpoint (no authentication required - uses refresh token from body) e.POST("/api/auth/refresh", cfg.AuthHandler.RefreshAccessToken) // Logout endpoint (optional authentication - can revoke tokens if provided) e.POST("/api/auth/logout", cfg.AuthHandler.Logout) // Auth update routes authGroup := e.Group("/api/auth", createJWTMiddleware(cfg)) authGroup.PUT("/password", cfg.AuthHandler.UpdatePassword) authGroup.PUT("/theme", cfg.AuthHandler.UpdateTheme) // Profile management (combined handlers - self-edit) authGroup.PUT("/profile", cfg.AuthHandler.UpdateProfile) authGroup.DELETE("/profile", cfg.AuthHandler.DeleteUser) // Admin-only routes (same handlers with URL param) admin := protected.Group("/auth", handlers.AdminMiddleware) admin.GET("/users", cfg.AuthHandler.ListUsers) admin.PUT("/users/:id/max-devices", cfg.AuthHandler.UpdateUserMaxDevices) admin.PUT("/profile/:id", cfg.AuthHandler.UpdateProfile) admin.PUT("/password/:id", cfg.AuthHandler.UpdatePassword) admin.DELETE("/profile/:id", cfg.AuthHandler.DeleteUser) }