netmaker/schema/posture_check.go
Abhishek Kondur ea75901f8f
NM-195: cleanup deleted tags and user groups from posturechecks, add nameserver to middleware (#3794)
* NM-195: add key tags info to posture check on join

* NM-195: add network user grps to posture check

* NM-195: add posture checks to middleware

* add all posture check to rsrc permission check func

* NM-195: cleanup deleted tags and user groups from posturechecks

* NM-195: add Nameserver to middleware
2025-12-19 17:36:39 +04:00

124 lines
3.7 KiB
Go

package schema
import (
"context"
"time"
"github.com/gravitl/netmaker/db"
"github.com/gravitl/netmaker/models"
"gorm.io/datatypes"
)
type Attribute string
type Values string
const (
OS Attribute = "os"
OSVersion Attribute = "os_version"
OSFamily Attribute = "os_family"
KernelVersion Attribute = "kernel_version"
AutoUpdate Attribute = "auto_update"
ClientVersion Attribute = "client_version"
ClientLocation Attribute = "client_location"
)
var PostureCheckAttrs = []Attribute{
ClientLocation,
ClientVersion,
OS,
OSVersion,
OSFamily,
KernelVersion,
AutoUpdate,
}
var PostureCheckAttrValuesMap = map[Attribute]map[string]struct{}{
ClientLocation: {
"any_valid_iso_country_codes": {},
},
ClientVersion: {
"any_valid_semantic_version": {},
},
OS: {
"linux": {},
"darwin": {},
"windows": {},
"ios": {},
"android": {},
},
OSVersion: {
"any_valid_semantic_version": {},
},
OSFamily: {
"linux-debian": {},
"linux-redhat": {},
"linux-suse": {},
"linux-arch": {},
"linux-gentoo": {},
"linux-other": {},
"darwin": {},
"windows": {},
"ios": {},
"android": {},
},
KernelVersion: {
"any_valid_semantic_version": {},
},
AutoUpdate: {
"true": {},
"false": {},
},
}
var PostureCheckAttrValues = map[Attribute][]string{
ClientLocation: {"any_valid_iso_country_codes"},
ClientVersion: {"any_valid_semantic_version"},
OS: {"linux", "darwin", "windows", "ios", "android"},
OSVersion: {"any_valid_semantic_version"},
OSFamily: {"linux-debian", "linux-redhat", "linux-suse", "linux-arch", "linux-gentoo", "linux-other", "darwin", "windows", "ios", "android"},
KernelVersion: {"any_valid_semantic_version"},
AutoUpdate: {"true", "false"},
}
type PostureCheck struct {
ID string `gorm:"primaryKey" json:"id"`
Name string `gorm:"name" json:"name"`
NetworkID models.NetworkID `gorm:"network_id" json:"network_id"`
Description string `gorm:"description" json:"description"`
Attribute Attribute `gorm:"attribute" json:"attribute"`
Values datatypes.JSONSlice[string] `gorm:"values" json:"values"`
Severity models.Severity `gorm:"severity" json:"severity"`
Tags datatypes.JSONMap `gorm:"tags" json:"tags"`
UserGroups datatypes.JSONMap `gorm:"user_groups" json:"user_groups"`
Status bool `gorm:"status" json:"status"`
CreatedBy string `gorm:"created_by" json:"created_by"`
CreatedAt time.Time `gorm:"created_at" json:"created_at"`
UpdatedAt time.Time `gorm:"updated_at" json:"updated_at"`
}
func (p *PostureCheck) Get(ctx context.Context) error {
return db.FromContext(ctx).Model(&PostureCheck{}).First(&p).Where("id = ?", p.ID).Error
}
func (p *PostureCheck) Update(ctx context.Context) error {
return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Updates(&p).Error
}
func (p *PostureCheck) Create(ctx context.Context) error {
return db.FromContext(ctx).Model(&PostureCheck{}).Create(&p).Error
}
func (p *PostureCheck) ListByNetwork(ctx context.Context) (pcli []PostureCheck, err error) {
err = db.FromContext(ctx).Model(&PostureCheck{}).Where("network_id = ?", p.NetworkID).Find(&pcli).Error
return
}
func (p *PostureCheck) Delete(ctx context.Context) error {
return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Delete(&p).Error
}
func (p *PostureCheck) UpdateStatus(ctx context.Context) error {
return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Updates(map[string]any{
"status": p.Status,
}).Error
}