2
0

migrate.go 2.6 KB

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