61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package swaggerui
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
)
|
|
|
|
const initializerJS = `window.onload = function() {
|
|
const ui = SwaggerUIBundle({
|
|
url: "doc.json",
|
|
dom_id: '#swagger-ui',
|
|
validatorUrl: null,
|
|
persistAuthorization: true,
|
|
presets: [
|
|
SwaggerUIBundle.presets.apis,
|
|
SwaggerUIStandalonePreset
|
|
],
|
|
plugins: [
|
|
SwaggerUIBundle.plugins.DownloadUrl
|
|
],
|
|
layout: "StandaloneLayout",
|
|
docExpansion: "list",
|
|
deepLinking: true,
|
|
defaultModelsExpandDepth: 1,
|
|
requestInterceptor: function(request) {
|
|
const auth = request.headers.Authorization || request.headers.authorization
|
|
|
|
if (typeof auth === 'string') {
|
|
const trimmed = auth.trim()
|
|
|
|
if (trimmed !== '' && !/^Bearer\s+/i.test(trimmed)) {
|
|
request.headers.Authorization = 'Bearer ' + trimmed
|
|
}
|
|
}
|
|
|
|
return request
|
|
}
|
|
})
|
|
|
|
window.ui = ui
|
|
}
|
|
`
|
|
|
|
// Handler serves Swagger UI and overrides the initializer script to prefix raw tokens with Bearer.
|
|
func Handler() gin.HandlerFunc {
|
|
defaultHandler := ginSwagger.WrapHandler(swaggerFiles.Handler, ginSwagger.PersistAuthorization(true))
|
|
|
|
return func(c *gin.Context) {
|
|
if strings.HasSuffix(c.Request.URL.Path, "/swagger-initializer.js") {
|
|
c.Data(http.StatusOK, "application/javascript", []byte(initializerJS))
|
|
return
|
|
}
|
|
|
|
defaultHandler(c)
|
|
}
|
|
}
|