mirror of https://github.com/containers/podman.git
Update mux rules to allow slashes in image names
%2F escaping is also supported. Return better response on bad search terms Fixes #5229 Signed-off-by: Jhon Honce <jhonce@redhat.com>
This commit is contained in:
parent
5dacee9395
commit
024ddda123
|
@ -155,7 +155,7 @@ func SearchImages(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
results, err := image.SearchImages(query.Term, options)
|
results, err := image.SearchImages(query.Term, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.InternalServerError(w, err)
|
utils.BadRequest(w, "term", query.Term, err)
|
||||||
}
|
}
|
||||||
utils.WriteResponse(w, http.StatusOK, results)
|
utils.WriteResponse(w, http.StatusOK, results)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,12 +31,16 @@ func GetImages(w http.ResponseWriter, r *http.Request) ([]*image.Image, error) {
|
||||||
if _, found := mux.Vars(r)["digests"]; found && query.Digests {
|
if _, found := mux.Vars(r)["digests"]; found && query.Digests {
|
||||||
UnSupportedParameter("digests")
|
UnSupportedParameter("digests")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(query.Filters) > 0 {
|
if len(query.Filters) > 0 {
|
||||||
for k, v := range query.Filters {
|
for k, v := range query.Filters {
|
||||||
for _, val := range v {
|
for _, val := range v {
|
||||||
filters = append(filters, fmt.Sprintf("%s=%s", k, val))
|
filters = append(filters, fmt.Sprintf("%s=%s", k, val))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return runtime.ImageRuntime().GetImagesWithFilters(filters)
|
return runtime.ImageRuntime().GetImagesWithFilters(filters)
|
||||||
|
} else {
|
||||||
|
return runtime.ImageRuntime().GetImages()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,10 +161,12 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// responses:
|
// responses:
|
||||||
// 200:
|
// 200:
|
||||||
// $ref: "#/responses/DocsSearchResponse"
|
// $ref: "#/responses/DocsSearchResponse"
|
||||||
|
// 400:
|
||||||
|
// $ref: "#/responses/BadParamError"
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/images/search"), s.APIHandler(handlers.SearchImages)).Methods(http.MethodGet)
|
r.Handle(VersionedPath("/images/search"), s.APIHandler(handlers.SearchImages)).Methods(http.MethodGet)
|
||||||
// swagger:operation DELETE /images/{name} compat removeImage
|
// swagger:operation DELETE /images/{name:.*} compat removeImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images (compat)
|
// - images (compat)
|
||||||
|
@ -172,7 +174,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Delete an image from local storage
|
// description: Delete an image from local storage
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: name or ID of image to delete
|
// description: name or ID of image to delete
|
||||||
|
@ -195,8 +197,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/ConflictError'
|
// $ref: '#/responses/ConflictError'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/images/{name}"), s.APIHandler(handlers.RemoveImage)).Methods(http.MethodDelete)
|
r.Handle(VersionedPath("/images/{name:.*}"), s.APIHandler(handlers.RemoveImage)).Methods(http.MethodDelete)
|
||||||
// swagger:operation GET /images/{name}/get compat exportImage
|
// swagger:operation GET /images/{name:.*}/get compat exportImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images (compat)
|
// - images (compat)
|
||||||
|
@ -204,7 +206,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Export an image in tarball format
|
// description: Export an image in tarball format
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -218,8 +220,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// format: binary
|
// format: binary
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/images/{name}/get"), s.APIHandler(generic.ExportImage)).Methods(http.MethodGet)
|
r.Handle(VersionedPath("/images/{name:.*}/get"), s.APIHandler(generic.ExportImage)).Methods(http.MethodGet)
|
||||||
// swagger:operation GET /images/{name}/history compat imageHistory
|
// swagger:operation GET /images/{name:.*}/history compat imageHistory
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images (compat)
|
// - images (compat)
|
||||||
|
@ -227,7 +229,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Return parent layers of an image.
|
// description: Return parent layers of an image.
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -240,8 +242,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: "#/responses/NoSuchImage"
|
// $ref: "#/responses/NoSuchImage"
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: "#/responses/InternalError"
|
// $ref: "#/responses/InternalError"
|
||||||
r.Handle(VersionedPath("/images/{name}/history"), s.APIHandler(handlers.HistoryImage)).Methods(http.MethodGet)
|
r.Handle(VersionedPath("/images/{name:.*}/history"), s.APIHandler(handlers.HistoryImage)).Methods(http.MethodGet)
|
||||||
// swagger:operation GET /images/{name}/json compat inspectImage
|
// swagger:operation GET /images/{name:.*}/json compat inspectImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images (compat)
|
// - images (compat)
|
||||||
|
@ -249,7 +251,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Return low-level information about an image.
|
// description: Return low-level information about an image.
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -262,8 +264,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: "#/responses/NoSuchImage"
|
// $ref: "#/responses/NoSuchImage"
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: "#/responses/InternalError"
|
// $ref: "#/responses/InternalError"
|
||||||
r.Handle(VersionedPath("/images/{name}/json"), s.APIHandler(generic.GetImage))
|
r.Handle(VersionedPath("/images/{name:.*}/json"), s.APIHandler(generic.GetImage))
|
||||||
// swagger:operation POST /images/{name}/tag compat tagImage
|
// swagger:operation POST /images/{name:.*}/tag compat tagImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images (compat)
|
// - images (compat)
|
||||||
|
@ -271,7 +273,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Tag an image so that it becomes part of a repository.
|
// description: Tag an image so that it becomes part of a repository.
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -296,7 +298,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/ConflictError'
|
// $ref: '#/responses/ConflictError'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/images/{name}/tag"), s.APIHandler(handlers.TagImage)).Methods(http.MethodPost)
|
r.Handle(VersionedPath("/images/{name:.*}/tag"), s.APIHandler(handlers.TagImage)).Methods(http.MethodPost)
|
||||||
// swagger:operation POST /commit/ compat commitContainer
|
// swagger:operation POST /commit/ compat commitContainer
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
|
@ -556,7 +558,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
libpod endpoints
|
libpod endpoints
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// swagger:operation POST /libpod/images/{name}/exists libpod libpodImageExists
|
// swagger:operation POST /libpod/images/{name:.*}/exists libpod libpodImageExists
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -564,7 +566,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Check if image exists in local store
|
// description: Check if image exists in local store
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -577,8 +579,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/NoSuchImage'
|
// $ref: '#/responses/NoSuchImage'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/exists"), s.APIHandler(libpod.ImageExists))
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/exists"), s.APIHandler(libpod.ImageExists))
|
||||||
// swagger:operation POST /libpod/images/{name}/tree libpod libpodImageTree
|
// swagger:operation POST /libpod/images/{name:.*}/tree libpod libpodImageTree
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -586,7 +588,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Retrieve the image tree for the provided image name or ID
|
// description: Retrieve the image tree for the provided image name or ID
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -603,8 +605,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/NoSuchImage'
|
// $ref: '#/responses/NoSuchImage'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/tree"), s.APIHandler(libpod.ImageTree))
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/tree"), s.APIHandler(libpod.ImageTree))
|
||||||
// swagger:operation GET /libpod/images/{name}/history libpod libpodImageHistory
|
// swagger:operation GET /libpod/images/{name:.*}/history libpod libpodImageHistory
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -612,7 +614,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Return parent layers of an image.
|
// description: Return parent layers of an image.
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -625,7 +627,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/NoSuchImage'
|
// $ref: '#/responses/NoSuchImage'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/history"), s.APIHandler(handlers.HistoryImage)).Methods(http.MethodGet)
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/history"), s.APIHandler(handlers.HistoryImage)).Methods(http.MethodGet)
|
||||||
// swagger:operation GET /libpod/images/json libpod libpodListImages
|
// swagger:operation GET /libpod/images/json libpod libpodListImages
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
|
@ -849,8 +851,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/ConflictError'
|
// $ref: '#/responses/ConflictError'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}"), s.APIHandler(handlers.RemoveImage)).Methods(http.MethodDelete)
|
r.Handle(VersionedPath("/libpod/images/{name:.*}"), s.APIHandler(handlers.RemoveImage)).Methods(http.MethodDelete)
|
||||||
// swagger:operation GET /libpod/images/{name}/get libpod libpoodExportImage
|
// swagger:operation GET /libpod/images/{name:.*}/get libpod libpoodExportImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -858,7 +860,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Export an image as a tarball
|
// description: Export an image as a tarball
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -882,8 +884,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/NoSuchImage'
|
// $ref: '#/responses/NoSuchImage'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/get"), s.APIHandler(libpod.ExportImage)).Methods(http.MethodGet)
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/get"), s.APIHandler(libpod.ExportImage)).Methods(http.MethodGet)
|
||||||
// swagger:operation GET /libpod/images/{name}/json libpod libpodInspectImage
|
// swagger:operation GET /libpod/images/{name:.*}/json libpod libpodInspectImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -891,7 +893,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Obtain low-level information about an image
|
// description: Obtain low-level information about an image
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -904,8 +906,8 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/NoSuchImage'
|
// $ref: '#/responses/NoSuchImage'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/json"), s.APIHandler(libpod.GetImage))
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/json"), s.APIHandler(libpod.GetImage))
|
||||||
// swagger:operation POST /libpod/images/{name}/tag libpod libpodTagImage
|
// swagger:operation POST /libpod/images/{name:.*}/tag libpod libpodTagImage
|
||||||
// ---
|
// ---
|
||||||
// tags:
|
// tags:
|
||||||
// - images
|
// - images
|
||||||
|
@ -913,7 +915,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// description: Tag an image so that it becomes part of a repository.
|
// description: Tag an image so that it becomes part of a repository.
|
||||||
// parameters:
|
// parameters:
|
||||||
// - in: path
|
// - in: path
|
||||||
// name: name
|
// name: name:.*
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// description: the name or ID of the container
|
// description: the name or ID of the container
|
||||||
|
@ -938,7 +940,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
|
||||||
// $ref: '#/responses/ConflictError'
|
// $ref: '#/responses/ConflictError'
|
||||||
// 500:
|
// 500:
|
||||||
// $ref: '#/responses/InternalError'
|
// $ref: '#/responses/InternalError'
|
||||||
r.Handle(VersionedPath("/libpod/images/{name}/tag"), s.APIHandler(handlers.TagImage)).Methods(http.MethodPost)
|
r.Handle(VersionedPath("/libpod/images/{name:.*}/tag"), s.APIHandler(handlers.TagImage)).Methods(http.MethodPost)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue