Files
zeekay 241625e7d9 rename: ziti → zt across all paths
- Repo names: ziti-* → zt-*
- Go modules: github.com/hanzozt/ziti → github.com/hanzozt/zt
- Docker images: hanzozt/ziti-* → hanzozt/zt-*
- C/Java/JS symbols: ziti_* → zt_*
- File and directory names updated
2026-02-18 18:34:19 -08:00

85 lines
1.5 KiB
Go

package posture
import (
"strings"
"github.com/blang/semver"
"github.com/hanzozt/zt/v2/common/pb/edge_ctrl_pb"
)
type OsCheck struct {
*edge_ctrl_pb.DataState_PostureCheck
*edge_ctrl_pb.DataState_PostureCheck_OsList
}
func (m *OsCheck) Evaluate(data *InstanceData) *CheckError {
if data == nil || data.Os == nil {
return &CheckError{
Id: m.Id,
Name: m.Name,
Cause: NilStateError,
}
}
osTypeFailure := &OneInListError[Str]{
GivenValues: []Str{Str(data.Os.Os.Type)},
}
var foundOs *edge_ctrl_pb.DataState_PostureCheck_Os = nil
for _, os := range m.OsList {
if !strings.EqualFold(strings.ToLower(os.OsType), strings.ToLower(data.Os.Os.Type)) {
osTypeFailure.ValidValues = append(osTypeFailure.ValidValues, Str(os.OsType))
} else {
foundOs = os
break
}
}
if foundOs == nil {
return &CheckError{
Id: m.Id,
Name: m.Name,
Cause: osTypeFailure,
}
}
dataVer, err := semver.Make(data.Os.Os.Version)
if err != nil {
return &CheckError{
Id: m.Id,
Name: m.Name,
Cause: err,
}
}
osVersionFailure := &OneInListError[Str]{
GivenValues: []Str{Str(data.Os.Os.Version)},
}
for _, version := range foundOs.OsVersions {
versionRange, err := semver.ParseRange(version)
if err != nil {
return &CheckError{
Id: m.Id,
Name: m.Name,
Cause: err,
}
}
if versionRange(dataVer) {
return nil
} else {
osVersionFailure.ValidValues = append(osVersionFailure.ValidValues, Str(version))
}
}
return &CheckError{
Id: m.Id,
Name: m.Name,
Cause: osVersionFailure,
}
}