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  }