acls.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package logic
  2. import (
  3. "encoding/json"
  4. "sort"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/gravitl/netmaker/models"
  7. )
  8. // InsertAcl - creates acl policy
  9. func InsertAcl(a models.Acl) error {
  10. d, err := json.Marshal(a)
  11. if err != nil {
  12. return err
  13. }
  14. return database.Insert(a.ID.String(), string(d), database.ACLS_TABLE_NAME)
  15. }
  16. func GetAcl(aID string) (models.Acl, error) {
  17. a := models.Acl{}
  18. d, err := database.FetchRecord(database.ACLS_TABLE_NAME, aID)
  19. if err != nil {
  20. return a, err
  21. }
  22. err = json.Unmarshal([]byte(d), &a)
  23. if err != nil {
  24. return a, err
  25. }
  26. return a, nil
  27. }
  28. // UpdateAcl - updates allowed fields on acls and commits to DB
  29. func UpdateAcl(newAcl, acl models.Acl) error {
  30. if newAcl.Name != "" {
  31. acl.Name = newAcl.Name
  32. }
  33. acl.Src = newAcl.Src
  34. acl.Dst = newAcl.Dst
  35. acl.AllowedDirection = newAcl.AllowedDirection
  36. acl.Enabled = newAcl.Enabled
  37. d, err := json.Marshal(acl)
  38. if err != nil {
  39. return err
  40. }
  41. return database.Insert(acl.ID.String(), string(d), database.ACLS_TABLE_NAME)
  42. }
  43. // DeleteAcl - deletes acl policy
  44. func DeleteAcl(a models.Acl) error {
  45. return database.DeleteRecord(database.ACLS_TABLE_NAME, a.ID.String())
  46. }
  47. // ListAcls - lists all acl policies
  48. func ListAcls(netID models.NetworkID) ([]models.Acl, error) {
  49. data, err := database.FetchRecords(database.TAG_TABLE_NAME)
  50. if err != nil && !database.IsEmptyRecord(err) {
  51. return []models.Acl{}, err
  52. }
  53. acls := []models.Acl{}
  54. for _, dataI := range data {
  55. acl := models.Acl{}
  56. err := json.Unmarshal([]byte(dataI), &acl)
  57. if err != nil {
  58. continue
  59. }
  60. if acl.NetworkID == netID {
  61. acls = append(acls, acl)
  62. }
  63. }
  64. return acls, nil
  65. }
  66. // SortTagEntrys - Sorts slice of Tag entries by their id
  67. func SortAclEntrys(acls []models.Acl) {
  68. sort.Slice(acls, func(i, j int) bool {
  69. return acls[i].Name < acls[j].Name
  70. })
  71. }