main.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "github.com/porter-dev/porter/cmd/migrate/keyrotate"
  6. adapter "github.com/porter-dev/porter/internal/adapter"
  7. "github.com/porter-dev/porter/internal/config"
  8. lr "github.com/porter-dev/porter/internal/logger"
  9. "github.com/porter-dev/porter/internal/models"
  10. ints "github.com/porter-dev/porter/internal/models/integrations"
  11. "github.com/joeshaw/envdecode"
  12. )
  13. func main() {
  14. fmt.Println("running migrations...")
  15. appConf := config.FromEnv()
  16. logger := lr.NewConsole(true)
  17. db, err := adapter.New(&appConf.Db)
  18. if err != nil {
  19. logger.Fatal().Err(err).Msg("")
  20. return
  21. }
  22. err = db.AutoMigrate(
  23. &models.Project{},
  24. &models.Role{},
  25. &models.User{},
  26. &models.Release{},
  27. &models.Session{},
  28. &models.GitRepo{},
  29. &models.Registry{},
  30. &models.HelmRepo{},
  31. &models.Cluster{},
  32. &models.ClusterCandidate{},
  33. &models.ClusterResolver{},
  34. &models.Infra{},
  35. &models.GitActionConfig{},
  36. &models.Invite{},
  37. &models.AuthCode{},
  38. &models.DNSRecord{},
  39. &models.PWResetToken{},
  40. &ints.KubeIntegration{},
  41. &ints.BasicIntegration{},
  42. &ints.OIDCIntegration{},
  43. &ints.OAuthIntegration{},
  44. &ints.GCPIntegration{},
  45. &ints.AWSIntegration{},
  46. &ints.TokenCache{},
  47. &ints.ClusterTokenCache{},
  48. &ints.RegTokenCache{},
  49. &ints.HelmRepoTokenCache{},
  50. )
  51. if err != nil {
  52. panic(err)
  53. }
  54. if shouldRotate, oldKeyStr, newKeyStr := shouldKeyRotate(); shouldRotate {
  55. oldKey := [32]byte{}
  56. newKey := [32]byte{}
  57. copy(oldKey[:], []byte(oldKeyStr))
  58. copy(newKey[:], []byte(newKeyStr))
  59. err := keyrotate.Rotate(db, &oldKey, &newKey)
  60. if err != nil {
  61. panic(err)
  62. }
  63. }
  64. }
  65. type RotateConf struct {
  66. // we add a dummy field to avoid empty struct issue with envdecode
  67. DummyField string `env:"ASDF,default=asdf"`
  68. OldEncryptionKey string `env:"OLD_ENCRYPTION_KEY"`
  69. NewEncryptionKey string `env:"NEW_ENCRYPTION_KEY"`
  70. }
  71. func shouldKeyRotate() (bool, string, string) {
  72. var c RotateConf
  73. if err := envdecode.StrictDecode(&c); err != nil {
  74. log.Fatalf("Failed to decode migration conf: %s", err)
  75. return false, "", ""
  76. }
  77. return c.OldEncryptionKey != "" && c.NewEncryptionKey != "", c.OldEncryptionKey, c.NewEncryptionKey
  78. }