mirror of
https://github.com/netbirdio/netbird.git
synced 2025-07-14 21:35:23 +02:00
* Add method to retrieve peer's applied posture checks * Add posture checks in server response and update proto messages * Refactor * Extends peer metadata synchronization through SyncRequest and propagate posture changes on syncResponse * Remove account lock * Pass system info on sync * Fix tests * Refactor * resolve merge * Evaluate process check on client (#1749) * implement server and client sync peer meta alongside mocks * wip: add check file and process * Add files to peer metadata for process check * wip: update peer meta on first sync * Add files to peer's metadata * Evaluate process check using files from peer metadata * Fix panic and append windows path to files * Fix check network address and files equality * Evaluate active process on darwin * Evaluate active process on linux * Skip processing processes if no paths are set * Return network map on peer meta-sync and update account peer's * Update client network map on meta sync * Get system info with applied checks * Add windows package * Remove a network map from sync meta-response * Update checks proto message * Keep client checks state and sync meta on checks change * Evaluate a running process * skip build for android and ios * skip check file and process for android and ios * bump gopsutil version * fix tests * move process check to separate os file * refactor * evaluate info with checks on receiving management events * skip meta-update for an old client with no meta-sync support * Check if peer meta is empty without reflection
65 lines
1.4 KiB
Go
65 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.Files))
|
|
for _, file := range peer.Meta.Files {
|
|
if file.ProcessIsRunning {
|
|
peerActiveProcesses = append(peerActiveProcesses, file.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
|
|
}
|