diff --git a/swagger.go b/swagger.go index 0a7486c..9969c52 100644 --- a/swagger.go +++ b/swagger.go @@ -10,6 +10,7 @@ import ( "github.com/labstack/echo/v4" swaggerFiles "github.com/swaggo/files" "github.com/swaggo/swag" + "golang.org/x/net/webdav" ) // Config stores echoSwagger configuration variables. @@ -56,8 +57,6 @@ var WrapHandler = EchoWrapHandler() func EchoWrapHandler(configFns ...func(c *Config)) echo.HandlerFunc { var once sync.Once - h := swaggerFiles.Handler - config := &Config{ URL: "doc.json", DeepLinking: true, @@ -75,6 +74,11 @@ func EchoWrapHandler(configFns ...func(c *Config)) echo.HandlerFunc { var re = regexp.MustCompile(`^(.*/)([^?].*)?[?|.]*$`) + h := webdav.Handler{ + FileSystem: swaggerFiles.FS, + LockSystem: webdav.NewMemLS(), + } + return func(c echo.Context) error { matches := re.FindStringSubmatch(c.Request().RequestURI) path := matches[2] diff --git a/swagger_test.go b/swagger_test.go index f5bbf27..be53de7 100644 --- a/swagger_test.go +++ b/swagger_test.go @@ -266,6 +266,29 @@ func TestWrapHandler(t *testing.T) { assert.Equal(t, 301, w7.Code) } +func TestHandlerReuse(t *testing.T) { + router := echo.New() + + router.GET("/swagger/*", EchoWrapHandler()) + router.GET("/admin/swagger/*", EchoWrapHandler()) + + w1 := performRequest("GET", "/swagger/index.html", router) + assert.Equal(t, 200, w1.Code) + assert.Equal(t, w1.Header()["Content-Type"][0], "text/html; charset=utf-8") + + w2 := performRequest("GET", "/admin/swagger/index.html", router) + assert.Equal(t, 200, w2.Code) + assert.Equal(t, w2.Header()["Content-Type"][0], "text/html; charset=utf-8") + + w3 := performRequest("GET", "/swagger/index.html", router) + assert.Equal(t, 200, w3.Code) + assert.Equal(t, w3.Header()["Content-Type"][0], "text/html; charset=utf-8") + + w4 := performRequest("GET", "/admin/swagger/index.html", router) + assert.Equal(t, 200, w4.Code) + assert.Equal(t, w4.Header()["Content-Type"][0], "text/html; charset=utf-8") +} + func performRequest(method, target string, e *echo.Echo) *httptest.ResponseRecorder { r := httptest.NewRequest(method, target, nil) w := httptest.NewRecorder()