mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package docs
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/go-openapi/runtime/middleware"
|
|
"github.com/kubescape/go-logger"
|
|
)
|
|
|
|
const (
|
|
OpenAPIDocsEndpoint = "docs"
|
|
OpenAPIRapiEndpoint = "rapi"
|
|
OpenAPISwaggerUIEndpoint = "swaggerui"
|
|
OpenAPIswaggerJSONEndpoint = "swagger.yaml"
|
|
OpenAPIV2Prefix = "/openapi/v2/"
|
|
)
|
|
|
|
//go:embed swagger.yaml
|
|
var specJSONBytes []byte
|
|
|
|
// ServeOpenAPISpec returns the OpenAPI specification file
|
|
func ServeOpenAPISpec(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write(specJSONBytes)
|
|
}
|
|
|
|
// NewOpenAPIUIHandler returns a handler that serves OpenAPI specs via UI
|
|
func NewOpenAPIUIHandler() http.Handler {
|
|
logstr := fmt.Sprintf("Starting swagger UI. baseURI: %v, docsEP: %v, rapidocEP: %v, swaggerui: %v", OpenAPIV2Prefix, OpenAPIDocsEndpoint, OpenAPIRapiEndpoint, OpenAPISwaggerUIEndpoint)
|
|
logger.L().Info(logstr)
|
|
|
|
redocOpts := middleware.RedocOpts{
|
|
BasePath: OpenAPIV2Prefix,
|
|
SpecURL: OpenAPIswaggerJSONEndpoint,
|
|
}
|
|
RapiDocOpts := middleware.RapiDocOpts{
|
|
BasePath: OpenAPIV2Prefix,
|
|
SpecURL: OpenAPIswaggerJSONEndpoint,
|
|
Path: OpenAPIRapiEndpoint,
|
|
}
|
|
opts := middleware.SwaggerUIOpts{
|
|
BasePath: OpenAPIV2Prefix,
|
|
SpecURL: OpenAPIswaggerJSONEndpoint,
|
|
Path: OpenAPISwaggerUIEndpoint,
|
|
}
|
|
|
|
var openAPISpecHandler http.Handler = http.HandlerFunc(ServeOpenAPISpec)
|
|
|
|
openAPIUIHandler := middleware.Redoc(redocOpts, openAPISpecHandler)
|
|
openAPIUIHandler = middleware.RapiDoc(RapiDocOpts, openAPIUIHandler)
|
|
openAPIUIHandler = middleware.SwaggerUI(opts, openAPIUIHandler)
|
|
|
|
return openAPIUIHandler
|
|
}
|