From 9634e7eef77abbba2584b8e78daf9c76cfdcedd9 Mon Sep 17 00:00:00 2001 From: Jhon Honce Date: Thu, 23 Jan 2020 16:13:47 -0700 Subject: Add query parameter converters for complex types * Add converter for URL query parameters of type map[string][]string * Add converter for URL query parameters of type time.Time * Added function to allocate and configure schema.Decoder for API use * Updated API handlers to leverage new converters, and correct handler code for filter type An encoding example for a client using filters: v := map[string][]string{ "dangling": {"true"}, } payload, err := jsoniter.MarshalToString(v) if err != nil { panic(err) } payload = "?filters=" + url.QueryEscape(payload) Signed-off-by: Jhon Honce --- pkg/api/handlers/generic/images.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'pkg/api/handlers/generic') diff --git a/pkg/api/handlers/generic/images.go b/pkg/api/handlers/generic/images.go index 395f64064..93adb7f69 100644 --- a/pkg/api/handlers/generic/images.go +++ b/pkg/api/handlers/generic/images.go @@ -62,14 +62,14 @@ func PruneImages(w http.ResponseWriter, r *http.Request) { // 200 no error // 500 internal var ( - dangling bool = true + dangling = true err error ) decoder := r.Context().Value("decoder").(*schema.Decoder) runtime := r.Context().Value("runtime").(*libpod.Runtime) query := struct { - filters map[string]string + Filters map[string][]string `schema:"filters"` }{ // This is where you can override the golang default value for one of fields } @@ -79,26 +79,25 @@ func PruneImages(w http.ResponseWriter, r *http.Request) { return } - // FIXME This is likely wrong due to it not being a map[string][]string - // until ts is not supported on podman prune - if len(query.filters["until"]) > 0 { - utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "until is not supported yet")) + if v, found := query.Filters["until"]; found { + utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "until=%s is not supported yet", v)) return } // labels are not supported on podman prune - if len(query.filters["label"]) > 0 { + if _, found := query.Filters["since"]; found { utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "labelis not supported yet")) return } - if len(query.filters["dangling"]) > 0 { - dangling, err = strconv.ParseBool(query.filters["dangling"]) + if v, found := query.Filters["dangling"]; found { + dangling, err = strconv.ParseBool(v[0]) if err != nil { utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "processing dangling filter")) return } } + idr := []types.ImageDeleteResponseItem{} // // This code needs to be migrated to libpod to work correctly. I could not -- cgit v1.2.3-54-g00ecf