Merged in feature/openapifixes (pull request #106)
OpenAPI Middleware & Fixes * updates
This commit is contained in:
@@ -11,10 +11,12 @@ import (
|
||||
"queryorchestration/internal/server"
|
||||
|
||||
"github.com/getkin/kin-openapi/openapi3"
|
||||
"github.com/getkin/kin-openapi/openapi3filter"
|
||||
"github.com/labstack/echo-contrib/echoprometheus"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
_ "github.com/lib/pq"
|
||||
oapimiddleware "github.com/oapi-codegen/echo-middleware"
|
||||
echoSwagger "github.com/swaggo/echo-swagger"
|
||||
)
|
||||
|
||||
@@ -94,16 +96,6 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
|
||||
}
|
||||
|
||||
e := echo.New()
|
||||
|
||||
// Add Prometheus middleware
|
||||
e.Use(echoprometheus.NewMiddleware("echo")) // Add the middleware
|
||||
e.GET("/metrics", echoprometheus.NewHandler())
|
||||
|
||||
// Other middlewares
|
||||
e.Use(getSlogCustomEchoMiddleware(cfg.GetLogger()))
|
||||
e.Use(middleware.Recover())
|
||||
e.Use(middleware.CORS())
|
||||
|
||||
cfg.SetRouter(e)
|
||||
|
||||
opnapi, err := cfg.RegisterHandlers()
|
||||
@@ -111,24 +103,17 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
jsonFunc, err := getSwaggerJSONFunc(opnapi)
|
||||
e.Use(echoprometheus.NewMiddleware("echo"))
|
||||
e.GET("/metrics", echoprometheus.NewHandler())
|
||||
|
||||
e.Use(getSlogCustomEchoMiddleware(cfg.GetLogger()))
|
||||
e.Use(middleware.Recover())
|
||||
e.Use(middleware.CORS())
|
||||
|
||||
err = setOapi(e, opnapi)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
e.GET("/swagger/doc.json", jsonFunc)
|
||||
|
||||
yamlFunc, err := getSwaggerYAMLFunc(opnapi)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
e.GET("/swagger/doc.yaml", yamlFunc)
|
||||
|
||||
e.GET("/swagger/*", echoSwagger.EchoWrapHandler(
|
||||
echoSwagger.DocExpansion("full"),
|
||||
echoSwagger.DeepLinking(true),
|
||||
echoSwagger.DomID("swagger-ui"),
|
||||
echoSwagger.PersistAuthorization(true),
|
||||
))
|
||||
|
||||
host := "0.0.0.0"
|
||||
port := 8080
|
||||
@@ -143,6 +128,38 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func setOapi(e *echo.Echo, opnapi *openapi3.T) error {
|
||||
opnapi.Servers = nil
|
||||
validatorOptions := &oapimiddleware.Options{
|
||||
Options: openapi3filter.Options{
|
||||
AuthenticationFunc: openapi3filter.NoopAuthenticationFunc,
|
||||
MultiError: true,
|
||||
},
|
||||
}
|
||||
e.Use(oapimiddleware.OapiRequestValidatorWithOptions(opnapi, validatorOptions))
|
||||
|
||||
jsonFunc, err := getSwaggerJSONFunc(opnapi)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.GET("/swagger/doc.json", jsonFunc)
|
||||
|
||||
yamlFunc, err := getSwaggerYAMLFunc(opnapi)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.GET("/swagger/doc.yaml", yamlFunc)
|
||||
|
||||
e.GET("/swagger/*", echoSwagger.EchoWrapHandler(
|
||||
echoSwagger.DocExpansion("full"),
|
||||
echoSwagger.DeepLinking(true),
|
||||
echoSwagger.DomID("swagger-ui"),
|
||||
echoSwagger.PersistAuthorization(true),
|
||||
))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) Listen() {
|
||||
slog.Info("Listening for requests", "port", s.port)
|
||||
defer func() {
|
||||
|
||||
Reference in New Issue
Block a user