feat: add disabling handler (#33)
This commit is contained in:
parent
6192cec7d2
commit
6f4fdc3ec4
41
README.md
41
README.md
|
|
@ -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.
|
||||
|
|
|
|||
19
swagger.go
19
swagger.go
|
|
@ -1,10 +1,12 @@
|
|||
package ginSwagger
|
||||
|
||||
import (
|
||||
"golang.org/x/net/webdav"
|
||||
"html/template"
|
||||
"os"
|
||||
"regexp"
|
||||
|
||||
"golang.org/x/net/webdav"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"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 -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package ginSwagger
|
|||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
|
@ -28,7 +29,43 @@ func TestWrapHandler(t *testing.T) {
|
|||
|
||||
w4 := performRequest("GET", "/notfound", router)
|
||||
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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue