Files
kubescape/httphandler/docs/server.go
Matthias Bertschy 70a9380966 fix go imports
Signed-off-by: Matthias Bertschy <matthias.bertschy@gmail.com>
2025-01-09 12:14:56 +01:00

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
}