mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-21 09:46:40 +00:00
* Add posture checks validation * Refactor code to incorporate posture checks validation directly into management. * Add posture checks validation for geolocation, OS version, network, process, and NB-version * Fix tests
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package posture
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
|
|
nbpeer "github.com/netbirdio/netbird/management/server/peer"
|
|
)
|
|
|
|
type Process struct {
|
|
Path string
|
|
WindowsPath string
|
|
}
|
|
|
|
type ProcessCheck struct {
|
|
Processes []Process
|
|
}
|
|
|
|
var _ Check = (*ProcessCheck)(nil)
|
|
|
|
func (p *ProcessCheck) Check(peer nbpeer.Peer) (bool, error) {
|
|
peerActiveProcesses := make([]string, 0, len(peer.Meta.Processes))
|
|
for _, process := range peer.Meta.Processes {
|
|
peerActiveProcesses = append(peerActiveProcesses, process.Path)
|
|
}
|
|
|
|
switch peer.Meta.GoOS {
|
|
case "darwin", "linux":
|
|
for _, process := range p.Processes {
|
|
if process.Path == "" || !slices.Contains(peerActiveProcesses, process.Path) {
|
|
return false, nil
|
|
}
|
|
}
|
|
return true, nil
|
|
case "windows":
|
|
for _, process := range p.Processes {
|
|
if process.WindowsPath == "" || !slices.Contains(peerActiveProcesses, process.WindowsPath) {
|
|
return false, nil
|
|
}
|
|
}
|
|
return true, nil
|
|
default:
|
|
return false, fmt.Errorf("unsupported peer's operating system: %s", peer.Meta.GoOS)
|
|
}
|
|
}
|
|
|
|
func (p *ProcessCheck) Name() string {
|
|
return ProcessCheckName
|
|
}
|
|
|
|
func (p *ProcessCheck) Validate() error {
|
|
if len(p.Processes) == 0 {
|
|
return fmt.Errorf("%s processes shouldn't be empty", p.Name())
|
|
}
|
|
|
|
for _, process := range p.Processes {
|
|
if process.Path == "" && process.WindowsPath == "" {
|
|
return fmt.Errorf("%s path shouldn't be empty", p.Name())
|
|
}
|
|
}
|
|
return nil
|
|
}
|