migrate.go 3.1 KB

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