diff --git a/management/server/checks/posture_checks.go b/management/server/checks/posture_checks.go index 8f90ebc1d..720fd87a8 100644 --- a/management/server/checks/posture_checks.go +++ b/management/server/checks/posture_checks.go @@ -3,6 +3,8 @@ package checks import ( "fmt" + "github.com/hashicorp/go-version" + nbpeer "github.com/netbirdio/netbird/management/server/peer" ) @@ -23,20 +25,44 @@ type NBVersionPostureCheck struct { } func (n *NBVersionPostureCheck) Check(peer nbpeer.Peer) error { - if peer.Meta.WtVersion >= n.MinimumVersionAllowed { + peerNBVersion, err := version.NewVersion(peer.Meta.UIVersion) + if err != nil { + return err + } + + constraints, err := version.NewConstraint(">= " + n.MinimumVersionAllowed) + if err != nil { + return err + } + + if constraints.Check(peerNBVersion) { return nil } - return fmt.Errorf("peer nb version is not supported") + + return fmt.Errorf("peer nb version is older than minimum allowed version %s", n.MinimumVersionAllowed) } type OSVersionPostureCheck struct { Enabled bool MinimumVersionAllowed string + + // TODO: add OS context to prevent using the same version on different OS types } func (o *OSVersionPostureCheck) Check(peer nbpeer.Peer) error { - if peer.Meta.WtVersion >= o.MinimumVersionAllowed { + peerNBVersion, err := version.NewVersion(peer.Meta.UIVersion) + if err != nil { + return err + } + + constraints, err := version.NewConstraint(">= " + o.MinimumVersionAllowed) + if err != nil { + return err + } + + if constraints.Check(peerNBVersion) { return nil } + return fmt.Errorf("peer OS version is not supported") }