I had an issue with leaky middleware with chi
func (uc *UserRouteController) UserRoute(router chi.Router) {
/*
This "leaks" the middleware, which means the fileserver tries to use user authentication for say, a favicon.ico request.
router.Use(middleware.DeserializeUser)
router.Get("/me", uc.userController.GetMe)
*/
// All routes here use user auth middleware
// Group is used to ensure the middleware doesn't leak onto next handlers
// Next handler is the http fileserver, aka need user auth to get index.html, not good
userGroup := router.Group(nil)
userGroup.Use(middleware.DeserializeUser)
userGroup.Get("/user", uc.userController.GetMe)
userGroup.Put("/user", uc.userController.PutUser)
userGroup.Delete("/user", uc.userController.DeleteUser)
userGroup.Post("/newordercart", uc.userController.NewCartUSER)
userGroup.Get("/ticket", uc.userController.GetTickets)
userGroup.Post("/ticket", uc.userController.PostTicket)
//userGroup.Get("/ticketcontent", uc.userController.GetTicketContent) // Merged with get /ticket
userGroup.Post("/ticketcontent", uc.userController.PostTicketContent)
userGroup.Get("/orderinfo", uc.userController.GetOrder)
}
Then i call it using uh ```go
var (
AuthController controllers.AuthController
AuthRouteController routes.AuthRouteController
UserController controllers.UserController
UserRouteController routes.UserRouteController
AdminController controllers.AdminController
AdminRouteController routes.AdminRouteController
)
With uh ```go
r.Route("/api", func(r chi.Router) {
r.Route("/", func(r chi.Router) {
// Api/* goes to UserRouteController / AuthRouteController
// More on this below
UserRouteController.UserRoute(r)
AuthRouteController.AuthRouter(r)
})
r.Route("/btcpay", routes.BtcPayRoute)
r.Route("/admin", func(r chi.Router) {
AdminRouteController.AdminRouter(r)
})
// Anything api/admin go to AdminRouter
})