#How to setup middleware for a Chi subrouter?

3 messages · Page 1 of 1 (latest)

merry quiver
#

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
    })
#

Mainly just do the userGroup := router.Group

hot ermine