usergroups.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package pro
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/models/promodels"
  6. )
  7. // InitializeGroups - initialize groups data structure if not present in the DB
  8. func InitializeGroups() error {
  9. if !DoesUserGroupExist(DEFAULT_ALLOWED_GROUPS) {
  10. return InsertUserGroup(DEFAULT_ALLOWED_GROUPS)
  11. }
  12. return nil
  13. }
  14. // InsertUserGroup - inserts a group into the
  15. func InsertUserGroup(groupName promodels.UserGroupName) error {
  16. currentGroups, err := GetUserGroups()
  17. if err != nil {
  18. return err
  19. }
  20. currentGroups[groupName] = promodels.Void{}
  21. newData, err := json.Marshal(&currentGroups)
  22. if err != nil {
  23. return err
  24. }
  25. return database.Insert(DB_GROUPS_KEY, string(newData), database.USER_GROUPS_TABLE_NAME)
  26. }
  27. // DeleteUserGroup - deletes a group from database
  28. func DeleteUserGroup(groupName promodels.UserGroupName) error {
  29. var newGroups promodels.UserGroups
  30. currentGroupRecords, err := database.FetchRecord(database.USER_GROUPS_TABLE_NAME, DB_GROUPS_KEY)
  31. if err != nil && !database.IsEmptyRecord(err) {
  32. return err
  33. }
  34. if err = json.Unmarshal([]byte(currentGroupRecords), &newGroups); err != nil {
  35. return err
  36. }
  37. delete(newGroups, groupName)
  38. newData, err := json.Marshal(&newGroups)
  39. if err != nil {
  40. return err
  41. }
  42. return database.Insert(DB_GROUPS_KEY, string(newData), database.USER_GROUPS_TABLE_NAME)
  43. }
  44. // GetUserGroups - get groups of users
  45. func GetUserGroups() (promodels.UserGroups, error) {
  46. var returnGroups promodels.UserGroups
  47. groupsRecord, err := database.FetchRecord(database.USER_GROUPS_TABLE_NAME, DB_GROUPS_KEY)
  48. if err != nil {
  49. if database.IsEmptyRecord(err) {
  50. return make(promodels.UserGroups, 1), nil
  51. }
  52. return returnGroups, err
  53. }
  54. if err = json.Unmarshal([]byte(groupsRecord), &returnGroups); err != nil {
  55. return returnGroups, err
  56. }
  57. return returnGroups, nil
  58. }
  59. // DoesUserGroupExist - checks if a user group exists
  60. func DoesUserGroupExist(group promodels.UserGroupName) bool {
  61. currentGroups, err := GetUserGroups()
  62. if err != nil {
  63. return true
  64. }
  65. for k := range currentGroups {
  66. if k == group {
  67. return true
  68. }
  69. }
  70. return false
  71. }