From 7cd95801ccb3d2c250c32baafb4943bcf4019fd9 Mon Sep 17 00:00:00 2001 From: pei Date: Sat, 23 Mar 2019 19:40:55 +0900 Subject: [PATCH] Revert "Revert "feat: support swagger configuration (#46)" (#47)" This reverts commit acdcd7f6da85a86cb5ecf02828d938f2e9368f71. --- README.md | 7 +++++-- example/main.go | 5 ++++- swagger.go | 35 ++++++++++++++++++++--------------- swagger_test.go | 6 +++--- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index d4b27fc..22c05e0 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,11 @@ import ( func main() { r := gin.New() - // use ginSwagger middleware to - r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + config := &ginSwagger.Config{ + URL: "http://localhost:8080/swagger/doc.json", //The url pointing to API definition + } + // use ginSwagger middleware to + r.GET("/swagger/*any", ginSwagger.WrapHandler(config, swaggerFiles.Handler)) r.Run() } diff --git a/example/main.go b/example/main.go index 17bac13..a3b6379 100644 --- a/example/main.go +++ b/example/main.go @@ -25,7 +25,10 @@ import ( func main() { r := gin.New() - r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + config := &ginSwagger.Config{ + URL: "http://localhost:8080/swagger/doc.json", //The url pointing to API definition + } + r.GET("/swagger/*any", ginSwagger.WrapHandler(config, swaggerFiles.Handler)) r.Run() } diff --git a/swagger.go b/swagger.go index 4795c24..b27457e 100644 --- a/swagger.go +++ b/swagger.go @@ -11,21 +11,28 @@ import ( "github.com/swaggo/swag" ) +// Config stores ginSwagger configuration variables. +type Config struct { + //The url pointing to API definition (normally swagger.json or swagger.yaml). + URL string +} + // WrapHandler wraps `http.Handler` into `gin.HandlerFunc`. -func WrapHandler(h *webdav.Handler) gin.HandlerFunc { +func WrapHandler(config *Config, h *webdav.Handler) gin.HandlerFunc { //create a template with name t := template.New("swagger_index.html") index, _ := t.Parse(swagger_index_templ) - type pro struct { - Host string - } - - var re = regexp.MustCompile(`(.*)(index\.html|doc\.json|favicon-16x16\.png|favicon-32x32\.png|/oauth2-redirect\.html|swagger-ui\.css|swagger-ui\.css\.map|swagger-ui\.js|swagger-ui\.js\.map|swagger-ui-bundle\.js|swagger-ui-bundle\.js\.map|swagger-ui-standalone-preset\.js|swagger-ui-standalone-preset\.js\.map)[\?|.]*`) + var rexp = regexp.MustCompile(`(.*)(index\.html|doc\.json|favicon-16x16\.png|favicon-32x32\.png|/oauth2-redirect\.html|swagger-ui\.css|swagger-ui\.css\.map|swagger-ui\.js|swagger-ui\.js\.map|swagger-ui-bundle\.js|swagger-ui-bundle\.js\.map|swagger-ui-standalone-preset\.js|swagger-ui-standalone-preset\.js\.map)[\?|.]*`) return func(c *gin.Context) { + + type swaggerUIBundle struct { + URL string + } + var matches []string - if matches = re.FindStringSubmatch(c.Request.RequestURI); len(matches) != 3 { + if matches = rexp.FindStringSubmatch(c.Request.RequestURI); len(matches) != 3 { c.Status(404) c.Writer.Write([]byte("404 page not found")) return @@ -36,10 +43,9 @@ func WrapHandler(h *webdav.Handler) gin.HandlerFunc { switch path { case "index.html": - s := &pro{ - Host: "doc.json", //TODO: provide to customs? - } - index.Execute(c.Writer, s) + index.Execute(c.Writer, &swaggerUIBundle{ + URL: config.URL, + }) case "doc.json": doc, err := swag.ReadDoc() if err != nil { @@ -49,14 +55,13 @@ func WrapHandler(h *webdav.Handler) gin.HandlerFunc { return default: h.ServeHTTP(c.Writer, c.Request) - } } } // DisablingWrapHandler turn handler off // if specified environment variable passed -func DisablingWrapHandler(h *webdav.Handler, envName string) gin.HandlerFunc { +func DisablingWrapHandler(config *Config, h *webdav.Handler, envName string) gin.HandlerFunc { eFlag := os.Getenv(envName) if eFlag != "" { return func(c *gin.Context) { @@ -66,7 +71,7 @@ func DisablingWrapHandler(h *webdav.Handler, envName string) gin.HandlerFunc { } } - return WrapHandler(h) + return WrapHandler(config, h) } const swagger_index_templ = ` @@ -144,7 +149,7 @@ const swagger_index_templ = ` window.onload = function() { // Build a system const ui = SwaggerUIBundle({ - url: "{{.Host}}", + url: "{{.URL}}", dom_id: '#swagger-ui', validatorUrl: null, presets: [ diff --git a/swagger_test.go b/swagger_test.go index 4fffb2b..4d5a4f7 100644 --- a/swagger_test.go +++ b/swagger_test.go @@ -16,7 +16,7 @@ func TestWrapHandler(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.New() - router.GET("/*any", WrapHandler(swaggerFiles.Handler)) + router.GET("/*any", WrapHandler(&Config{}, swaggerFiles.Handler)) w1 := performRequest("GET", "/index.html", router) assert.Equal(t, 200, w1.Code) @@ -37,7 +37,7 @@ func TestDisablingWrapHandler(t *testing.T) { router := gin.New() disablingKey := "SWAGGER_DISABLE" - router.GET("/simple/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey)) + router.GET("/simple/*any", DisablingWrapHandler(&Config{}, swaggerFiles.Handler, disablingKey)) w1 := performRequest("GET", "/simple/index.html", router) assert.Equal(t, 200, w1.Code) @@ -53,7 +53,7 @@ func TestDisablingWrapHandler(t *testing.T) { os.Setenv(disablingKey, "true") - router.GET("/disabling/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey)) + router.GET("/disabling/*any", DisablingWrapHandler(&Config{}, swaggerFiles.Handler, disablingKey)) w11 := performRequest("GET", "/disabling/index.html", router) assert.Equal(t, 404, w11.Code)