mirror of
https://github.com/hanzozt/zt.git
synced 2026-11-02 11:38:22 +00:00
* adds posture cache, instance, instance data, and event hooks - reworks router security - abstracts api session and service sessions - use connection tracker instead of various maps - doc - adds service sessions as always JWTs - addes token logging fields - removes multiple connection tracking fields - adds support for router specific posture data/respones - adds support for router posture check evaluation - defer dial/bind posture checking for legacy to controller - fix double session event emitting - fix session event missing id
85 lines
1.5 KiB
Go
85 lines
1.5 KiB
Go
package posture
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/blang/semver"
|
|
"github.com/openziti/ziti/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,
|
|
}
|
|
|
|
}
|