github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/api/server/handler_api.go (about) 1 package server 2 3 import ( 4 "fmt" 5 "net/http" 6 "runtime" 7 8 "github.com/hanks177/podman/v4/version" 9 "github.com/sirupsen/logrus" 10 ) 11 12 // APIHandler is a wrapper to enhance HandlerFunc's and remove redundant code 13 func (s *APIServer) APIHandler(h http.HandlerFunc) http.HandlerFunc { 14 return func(w http.ResponseWriter, r *http.Request) { 15 // Wrapper to hide some boilerplate 16 fn := func(w http.ResponseWriter, r *http.Request) { 17 if err := r.ParseForm(); err != nil { 18 logrus.WithFields(logrus.Fields{ 19 "X-Reference-Id": r.Header.Get("X-Reference-Id"), 20 }).Info("Failed Request: unable to parse form: " + err.Error()) 21 } 22 23 cv := version.APIVersion[version.Compat][version.CurrentAPI] 24 w.Header().Set("API-Version", fmt.Sprintf("%d.%d", cv.Major, cv.Minor)) 25 26 lv := version.APIVersion[version.Libpod][version.CurrentAPI].String() 27 w.Header().Set("Libpod-API-Version", lv) 28 w.Header().Set("Server", "Libpod/"+lv+" ("+runtime.GOOS+")") 29 30 if s.CorsHeaders != "" { 31 w.Header().Set("Access-Control-Allow-Origin", s.CorsHeaders) 32 w.Header().Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Registry-Auth, Connection, Upgrade, X-Registry-Config") 33 w.Header().Set("Access-Control-Allow-Methods", "HEAD, GET, POST, DELETE, PUT, OPTIONS") 34 } 35 36 h(w, r) 37 } 38 fn(w, r) 39 } 40 } 41 42 // VersionedPath prepends the version parsing code 43 // any handler may override this default when registering URL(s) 44 func VersionedPath(p string) string { 45 return "/v{version:[0-9][0-9A-Za-z.-]*}" + p 46 }