summaryrefslogtreecommitdiff
path: root/pkg/api/handlers/compat/events.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/api/handlers/compat/events.go')
-rw-r--r--pkg/api/handlers/compat/events.go54
1 files changed, 2 insertions, 52 deletions
diff --git a/pkg/api/handlers/compat/events.go b/pkg/api/handlers/compat/events.go
index 9e82831d7..dd0a9e7a9 100644
--- a/pkg/api/handlers/compat/events.go
+++ b/pkg/api/handlers/compat/events.go
@@ -1,69 +1,19 @@
package compat
import (
- "encoding/json"
- "fmt"
"net/http"
"github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/libpod/events"
"github.com/containers/podman/v3/pkg/api/handlers/utils"
"github.com/containers/podman/v3/pkg/domain/entities"
+ "github.com/containers/podman/v3/pkg/util"
"github.com/gorilla/schema"
jsoniter "github.com/json-iterator/go"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
-// filtersFromRequests extracts the "filters" parameter from the specified
-// http.Request. The parameter can either be a `map[string][]string` as done
-// in new versions of Docker and libpod, or a `map[string]map[string]bool` as
-// done in older versions of Docker. We have to do a bit of Yoga to support
-// both - just as Docker does as well.
-//
-// Please refer to https://github.com/containers/podman/issues/6899 for some
-// background.
-func filtersFromRequest(r *http.Request) ([]string, error) {
- var (
- compatFilters map[string]map[string]bool
- filters map[string][]string
- libpodFilters []string
- raw []byte
- )
-
- if _, found := r.URL.Query()["filters"]; found {
- raw = []byte(r.Form.Get("filters"))
- } else if _, found := r.URL.Query()["Filters"]; found {
- raw = []byte(r.Form.Get("Filters"))
- } else {
- return []string{}, nil
- }
-
- // Backwards compat with older versions of Docker.
- if err := json.Unmarshal(raw, &compatFilters); err == nil {
- for filterKey, filterMap := range compatFilters {
- for filterValue, toAdd := range filterMap {
- if toAdd {
- libpodFilters = append(libpodFilters, fmt.Sprintf("%s=%s", filterKey, filterValue))
- }
- }
- }
- return libpodFilters, nil
- }
-
- if err := json.Unmarshal(raw, &filters); err != nil {
- return nil, err
- }
-
- for filterKey, filterSlice := range filters {
- for _, filterValue := range filterSlice {
- libpodFilters = append(libpodFilters, fmt.Sprintf("%s=%s", filterKey, filterValue))
- }
- }
-
- return libpodFilters, nil
-}
-
// NOTE: this endpoint serves both the docker-compatible one and the new libpod
// one.
func GetEvents(w http.ResponseWriter, r *http.Request) {
@@ -92,7 +42,7 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
fromStart = true
}
- libpodFilters, err := filtersFromRequest(r)
+ libpodFilters, err := util.FiltersFromRequest(r)
if err != nil {
utils.Error(w, "failed to parse parameters", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return