Skip to content

Commit

Permalink
serve swagger when present
Browse files Browse the repository at this point in the history
register the swagger endpoint and add some error handling for when the swagger file does not exist

Signed-off-by: Brent Baude <[email protected]>
  • Loading branch information
baude authored and snj33v committed May 31, 2020
1 parent 6f982b5 commit b953a56
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 14 deletions.
29 changes: 28 additions & 1 deletion pkg/api/handlers/libpod/swagger.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
package libpod

import "github.com/containers/image/v5/manifest"
import (
"net/http"
"os"

"github.com/containers/image/v5/manifest"
"github.com/containers/libpod/pkg/api/handlers/utils"
"github.com/pkg/errors"
)

// DefaultPodmanSwaggerSpec provides the default path to the podman swagger spec file
const DefaultPodmanSwaggerSpec = "/usr/share/containers/podman/swagger.yaml"

// List Containers
// swagger:response ListContainers
Expand All @@ -15,3 +25,20 @@ type swagInspectManifestResponse struct {
// in:body
Body manifest.List
}

func ServeSwagger(w http.ResponseWriter, r *http.Request) {
path := DefaultPodmanSwaggerSpec
if p, found := os.LookupEnv("PODMAN_SWAGGER_SPEC"); found {
path = p
}
if _, err := os.Stat(path); err != nil {
if os.IsNotExist(err) {
utils.InternalServerError(w, errors.Errorf("file %q does not exist", path))
return
}
utils.InternalServerError(w, err)
return
}
w.Header().Set("Content-Type", "text/yaml")
http.ServeFile(w, r, path)
}
15 changes: 2 additions & 13 deletions pkg/api/server/register_swagger.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,14 @@ package server

import (
"net/http"
"os"

"github.com/containers/libpod/pkg/api/handlers/libpod"
"github.com/gorilla/mux"
)

// DefaultPodmanSwaggerSpec provides the default path to the podman swagger spec file
const DefaultPodmanSwaggerSpec = "/usr/share/containers/podman/swagger.yaml"

// RegisterSwaggerHandlers maps the swagger endpoint for the server
func (s *APIServer) RegisterSwaggerHandlers(r *mux.Router) error {
// This handler does _*NOT*_ provide an UI rather just a swagger spec that an UI could render
r.PathPrefix("/swagger/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := DefaultPodmanSwaggerSpec
if p, found := os.LookupEnv("PODMAN_SWAGGER_SPEC"); found {
path = p
}
w.Header().Set("Content-Type", "text/yaml")

http.ServeFile(w, r, path)
})
r.HandleFunc(VersionedPath("/libpod/swagger"), s.APIHandler(libpod.ServeSwagger)).Methods(http.MethodGet)
return nil
}
1 change: 1 addition & 0 deletions pkg/api/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
server.registerPingHandlers,
server.registerPluginsHandlers,
server.registerPodsHandlers,
server.RegisterSwaggerHandlers,
server.registerSwarmHandlers,
server.registerSystemHandlers,
server.registerVersionHandlers,
Expand Down

0 comments on commit b953a56

Please sign in to comment.