package middleware import ( "fmt" "net/http" "edge-infra.dev/pkg/edge/client" "edge-infra.dev/pkg/lib/runtime/version" "github.com/gin-gonic/gin" comp "github.com/hashicorp/go-version" ) // CheckVersion extract edge-version token from header, validate if it matches the server version. func CheckVersion() gin.HandlerFunc { return func(c *gin.Context) { clientVersion, err := comp.NewVersion(c.GetHeader(client.EdgeVersion)) if err == nil { serverVersion, err := comp.NewVersion(version.New().SemVer) if err == nil && serverVersion.LessThan(clientVersion) { errMsg := fmt.Sprintf("client version %s incompatible with server version %s", clientVersion, serverVersion) c.String(http.StatusBadRequest, errMsg) return } } c.Next() } }