github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/go-chi/chi/middleware/get_head.go (about) 1 package middleware 2 3 import ( 4 "github.com/hellobchain/newcryptosm/http" 5 6 "github.com/hellobchain/third_party/go-chi/chi" 7 ) 8 9 // GetHead automatically route undefined HEAD requests to GET handlers. 10 func GetHead(next http.Handler) http.Handler { 11 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 12 if r.Method == "HEAD" { 13 rctx := chi.RouteContext(r.Context()) 14 routePath := rctx.RoutePath 15 if routePath == "" { 16 if r.URL.RawPath != "" { 17 routePath = r.URL.RawPath 18 } else { 19 routePath = r.URL.Path 20 } 21 } 22 23 // Temporary routing context to look-ahead before routing the request 24 tctx := chi.NewRouteContext() 25 26 // Attempt to find a HEAD handler for the routing path, if not found, traverse 27 // the router as through its a GET route, but proceed with the request 28 // with the HEAD method. 29 if !rctx.Routes.Match(tctx, "HEAD", routePath) { 30 rctx.RouteMethod = "GET" 31 rctx.RoutePath = routePath 32 next.ServeHTTP(w, r) 33 return 34 } 35 } 36 37 next.ServeHTTP(w, r) 38 }) 39 }