feat: add disabling handler (#33)
This commit is contained in:
committed by
Eason Lin
parent
6192cec7d2
commit
6f4fdc3ec4
@@ -75,3 +75,44 @@ func main() {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
6. If you want to disable swagger when some environment variable is set, use `DisablingWrapHandler`
|
||||||
|
|
||||||
|
### Example with disabling:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/swaggo/gin-swagger"
|
||||||
|
"github.com/swaggo/gin-swagger/swaggerFiles"
|
||||||
|
|
||||||
|
_ "./docs" // docs is generated by Swag CLI, you have to import it.
|
||||||
|
)
|
||||||
|
|
||||||
|
// @title Swagger Example API
|
||||||
|
// @version 1.0
|
||||||
|
// @description This is a sample server Petstore server.
|
||||||
|
// @termsOfService http://swagger.io/terms/
|
||||||
|
|
||||||
|
// @contact.name API Support
|
||||||
|
// @contact.url http://www.swagger.io/support
|
||||||
|
// @contact.email support@swagger.io
|
||||||
|
|
||||||
|
// @license.name Apache 2.0
|
||||||
|
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
|
// @host petstore.swagger.io
|
||||||
|
// @BasePath /v2
|
||||||
|
func main() {
|
||||||
|
r := gin.New()
|
||||||
|
|
||||||
|
// use ginSwagger middleware to
|
||||||
|
r.GET("/swagger/*any", ginSwagger.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE"))
|
||||||
|
|
||||||
|
r.Run()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, if you set envioment variable `NAME_OF_ENV_VARIABLE` to anything, `/swagger/*any`
|
||||||
|
will respond 404, just like when route unspecified.
|
||||||
|
|||||||
+18
-1
@@ -1,10 +1,12 @@
|
|||||||
package ginSwagger
|
package ginSwagger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"golang.org/x/net/webdav"
|
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
|
"golang.org/x/net/webdav"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/swaggo/swag"
|
"github.com/swaggo/swag"
|
||||||
)
|
)
|
||||||
@@ -49,6 +51,21 @@ func WrapHandler(h *webdav.Handler) gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DisablingWrapHandler turn handler off
|
||||||
|
// if specified environment variable passed
|
||||||
|
func DisablingWrapHandler(h *webdav.Handler, envName string) gin.HandlerFunc {
|
||||||
|
eFlag := os.Getenv(envName)
|
||||||
|
if eFlag != "" {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
// Simulate behavior when route unspecified and
|
||||||
|
// return 404 HTTP code
|
||||||
|
c.String(404, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return WrapHandler(h)
|
||||||
|
}
|
||||||
|
|
||||||
const swagger_index_templ = `<!-- HTML for static distribution bundle build -->
|
const swagger_index_templ = `<!-- HTML for static distribution bundle build -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package ginSwagger
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -28,7 +29,43 @@ func TestWrapHandler(t *testing.T) {
|
|||||||
|
|
||||||
w4 := performRequest("GET", "/notfound", router)
|
w4 := performRequest("GET", "/notfound", router)
|
||||||
assert.Equal(t, 404, w4.Code)
|
assert.Equal(t, 404, w4.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDisablingWrapHandler(t *testing.T) {
|
||||||
|
gin.SetMode(gin.TestMode)
|
||||||
|
|
||||||
|
router := gin.New()
|
||||||
|
disablingKey := "SWAGGER_DISABLE"
|
||||||
|
|
||||||
|
router.GET("/simple/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey))
|
||||||
|
|
||||||
|
w1 := performRequest("GET", "/simple/index.html", router)
|
||||||
|
assert.Equal(t, 200, w1.Code)
|
||||||
|
|
||||||
|
w2 := performRequest("GET", "/simple/doc.json", router)
|
||||||
|
assert.Equal(t, 200, w2.Code)
|
||||||
|
|
||||||
|
w3 := performRequest("GET", "/simple/favicon-16x16.png", router)
|
||||||
|
assert.Equal(t, 200, w3.Code)
|
||||||
|
|
||||||
|
w4 := performRequest("GET", "/simple/notfound", router)
|
||||||
|
assert.Equal(t, 404, w4.Code)
|
||||||
|
|
||||||
|
os.Setenv(disablingKey, "true")
|
||||||
|
|
||||||
|
router.GET("/disabling/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey))
|
||||||
|
|
||||||
|
w11 := performRequest("GET", "/disabling/index.html", router)
|
||||||
|
assert.Equal(t, 404, w11.Code)
|
||||||
|
|
||||||
|
w22 := performRequest("GET", "/disabling/doc.json", router)
|
||||||
|
assert.Equal(t, 404, w22.Code)
|
||||||
|
|
||||||
|
w33 := performRequest("GET", "/disabling/favicon-16x16.png", router)
|
||||||
|
assert.Equal(t, 404, w33.Code)
|
||||||
|
|
||||||
|
w44 := performRequest("GET", "/disabling/notfound", router)
|
||||||
|
assert.Equal(t, 404, w44.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
func performRequest(method, target string, router *gin.Engine) *httptest.ResponseRecorder {
|
func performRequest(method, target string, router *gin.Engine) *httptest.ResponseRecorder {
|
||||||
|
|||||||
Reference in New Issue
Block a user