posture_check.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package schema
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gravitl/netmaker/db"
  6. "github.com/gravitl/netmaker/models"
  7. "gorm.io/datatypes"
  8. )
  9. type Attribute string
  10. type Values string
  11. const (
  12. OS Attribute = "os"
  13. OSVersion Attribute = "os_version"
  14. OSFamily Attribute = "os_family"
  15. KernelVersion Attribute = "kernel_version"
  16. AutoUpdate Attribute = "auto_update"
  17. ClientVersion Attribute = "client_version"
  18. ClientLocation Attribute = "client_location"
  19. )
  20. var PostureCheckAttrs = []Attribute{
  21. ClientLocation,
  22. ClientVersion,
  23. OS,
  24. OSVersion,
  25. OSFamily,
  26. KernelVersion,
  27. AutoUpdate,
  28. }
  29. var PostureCheckAttrValuesMap = map[Attribute]map[string]struct{}{
  30. ClientLocation: {
  31. "any_valid_iso_country_codes": {},
  32. },
  33. ClientVersion: {
  34. "any_valid_semantic_version": {},
  35. },
  36. OS: {
  37. "linux": {},
  38. "darwin": {},
  39. "windows": {},
  40. "ios": {},
  41. "android": {},
  42. },
  43. OSVersion: {
  44. "any_valid_semantic_version": {},
  45. },
  46. OSFamily: {
  47. "linux-debian": {},
  48. "linux-redhat": {},
  49. "linux-suse": {},
  50. "linux-arch": {},
  51. "linux-gentoo": {},
  52. "linux-other": {},
  53. "darwin": {},
  54. "windows": {},
  55. "ios": {},
  56. "android": {},
  57. },
  58. KernelVersion: {
  59. "any_valid_semantic_version": {},
  60. },
  61. AutoUpdate: {
  62. "true": {},
  63. "false": {},
  64. },
  65. }
  66. var PostureCheckAttrValues = map[Attribute][]string{
  67. ClientLocation: {"any_valid_iso_country_codes"},
  68. ClientVersion: {"any_valid_semantic_version"},
  69. OS: {"linux", "darwin", "windows", "ios", "android"},
  70. OSVersion: {"any_valid_semantic_version"},
  71. OSFamily: {"linux-debian", "linux-redhat", "linux-suse", "linux-arch", "linux-gentoo", "linux-other", "darwin", "windows", "ios", "android"},
  72. KernelVersion: {"any_valid_semantic_version"},
  73. AutoUpdate: {"true", "false"},
  74. }
  75. type PostureCheck struct {
  76. ID string `gorm:"primaryKey" json:"id"`
  77. Name string `gorm:"name" json:"name"`
  78. NetworkID models.NetworkID `gorm:"network_id" json:"network_id"`
  79. Description string `gorm:"description" json:"description"`
  80. Attribute Attribute `gorm:"attribute" json:"attribute"`
  81. Values datatypes.JSONSlice[string] `gorm:"values" json:"values"`
  82. Severity models.Severity `gorm:"severity" json:"severity"`
  83. Tags datatypes.JSONMap `gorm:"tags" json:"tags"`
  84. UserGroups datatypes.JSONMap `gorm:"user_groups" json:"user_groups"`
  85. Status bool `gorm:"status" json:"status"`
  86. CreatedBy string `gorm:"created_by" json:"created_by"`
  87. CreatedAt time.Time `gorm:"created_at" json:"created_at"`
  88. UpdatedAt time.Time `gorm:"updated_at" json:"updated_at"`
  89. }
  90. func (p *PostureCheck) Get(ctx context.Context) error {
  91. return db.FromContext(ctx).Model(&PostureCheck{}).First(&p).Where("id = ?", p.ID).Error
  92. }
  93. func (p *PostureCheck) Update(ctx context.Context) error {
  94. return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Updates(&p).Error
  95. }
  96. func (p *PostureCheck) Create(ctx context.Context) error {
  97. return db.FromContext(ctx).Model(&PostureCheck{}).Create(&p).Error
  98. }
  99. func (p *PostureCheck) ListByNetwork(ctx context.Context) (pcli []PostureCheck, err error) {
  100. err = db.FromContext(ctx).Model(&PostureCheck{}).Where("network_id = ?", p.NetworkID).Find(&pcli).Error
  101. return
  102. }
  103. func (p *PostureCheck) Delete(ctx context.Context) error {
  104. return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Delete(&p).Error
  105. }
  106. func (p *PostureCheck) UpdateStatus(ctx context.Context) error {
  107. return db.FromContext(ctx).Model(&PostureCheck{}).Where("id = ?", p.ID).Updates(map[string]any{
  108. "status": p.Status,
  109. }).Error
  110. }