migrate.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package migrate
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/logger"
  6. "github.com/gravitl/netmaker/logic"
  7. "github.com/gravitl/netmaker/models"
  8. "golang.org/x/exp/slog"
  9. )
  10. // Run - runs all migrations
  11. func Run() {
  12. updateEnrollmentKeys()
  13. assignSuperAdmin()
  14. }
  15. func assignSuperAdmin() {
  16. users, err := logic.GetUsers()
  17. if err != nil || len(users) == 0 {
  18. return
  19. }
  20. if ok, _ := logic.HasSuperAdmin(); ok {
  21. return
  22. }
  23. createdSuperAdmin := false
  24. for _, u := range users {
  25. if u.IsAdmin {
  26. user, err := logic.GetUser(u.UserName)
  27. if err != nil {
  28. slog.Error("error getting user", "user", u.UserName, "error", err.Error())
  29. continue
  30. }
  31. user.IsSuperAdmin = true
  32. user.IsAdmin = false
  33. err = logic.UpsertUser(*user)
  34. if err != nil {
  35. slog.Error("error updating user to superadmin", "user", user.UserName, "error", err.Error())
  36. continue
  37. } else {
  38. createdSuperAdmin = true
  39. }
  40. break
  41. }
  42. }
  43. if !createdSuperAdmin {
  44. slog.Error("failed to create superadmin!!")
  45. }
  46. }
  47. func updateEnrollmentKeys() {
  48. rows, err := database.FetchRecords(database.ENROLLMENT_KEYS_TABLE_NAME)
  49. if err != nil {
  50. return
  51. }
  52. for _, row := range rows {
  53. var key models.EnrollmentKey
  54. if err = json.Unmarshal([]byte(row), &key); err != nil {
  55. continue
  56. }
  57. if key.Type != models.Undefined {
  58. logger.Log(2, "migration: enrollment key type already set")
  59. continue
  60. } else {
  61. logger.Log(2, "migration: updating enrollment key type")
  62. if key.Unlimited {
  63. key.Type = models.Unlimited
  64. } else if key.UsesRemaining > 0 {
  65. key.Type = models.Uses
  66. } else if !key.Expiration.IsZero() {
  67. key.Type = models.TimeExpiration
  68. }
  69. }
  70. data, err := json.Marshal(key)
  71. if err != nil {
  72. logger.Log(0, "migration: marshalling enrollment key: "+err.Error())
  73. continue
  74. }
  75. if err = database.Insert(key.Value, string(data), database.ENROLLMENT_KEYS_TABLE_NAME); err != nil {
  76. logger.Log(0, "migration: inserting enrollment key: "+err.Error())
  77. continue
  78. }
  79. }
  80. }